相关疑难解决方法(0)

在 C# 中将 uchar[] 从本机 dll 编组到 byte[] 的正确方法

我正在尝试将我的本机 dll 通过 CoTaskMemAlloc 分配的一些数据编组到我的 c# 应用程序中,并想知道我这样做的方式是否完全错误,或者我错过了方法 c# 方面的一些微妙装饰。

目前我有c++方面。

extern "C" __declspec(dllexport) bool __stdcall CompressData(  unsigned char* pInputData, unsigned int inSize, unsigned char*& pOutputBuffer, unsigned int& uOutputSize)
{ ...
    pOutputBuffer = static_cast<unsigned char*>(CoTaskMemAlloc(60000));
    uOutputSize = 60000;
Run Code Online (Sandbox Code Playgroud)

在 C# 方面。

    private const string dllName = "TestDll.dll";

    [System.Security.SuppressUnmanagedCodeSecurity]
    [DllImport(dllName)]
    public static extern bool CompressData(byte[] inputData, uint inputSize, out byte[] outputData, out uint outputSize );
    ...
    byte[] outputData;
    uint outputSize;
    bool ret = CompressData(packEntry.uncompressedData, (uint)packEntry.uncompressedData.Length, out outputData, out outputSize);
Run Code Online (Sandbox Code Playgroud)

这里的outputSize是预期的60000,但是outputData的大小为1,当我memset缓冲区c++端时,它似乎只复制1个字节,所以这是错误的,我需要使用IntPtr + outputSize,或者我是否缺少一些微妙的东西来完成我已经拥有的工作? …

.net c# pinvoke marshalling

4
推荐指数
1
解决办法
4005
查看次数

标签 统计

.net ×1

c# ×1

marshalling ×1

pinvoke ×1