在C++中从char*获取C#中的byte []

Ono*_*Ono 2 c# c++ dll marshalling

在C#中我有一个数据类型byte[],我想用返回的C++函数填写char*

C++函数(in ImageData.dll)

char* pMemoryBuffer = NULL;
char* LoadData(const char *fileName)
{
    // processing pMemoryBuffer ...
    return pMemoryBuffer;  
}
Run Code Online (Sandbox Code Playgroud)

将本机dll导入C#:

    [DllImport(".\\Modules_Native\\ImageData.dll", EntryPoint = "LoadData")]
   private extern static byte[] LoadData(string fileName);
Run Code Online (Sandbox Code Playgroud)

byte[]C#中的数据

byte[] buffer = new byte[256*256];
buffer = LoadData("D:\\myPic.tif");
Run Code Online (Sandbox Code Playgroud)

显然它还没有工作,但它提出了我想做的想法.所以我想知道如何使这项工作,以及正确的方法是什么.非常感谢您的教育.

Moe*_*bai 5

试试这个

// c++

    void LoadData(unsigned char* *pMemoryBuffer, const char *fileName)
    {
        // processing pMemoryBuffer ...
        *pMemoryBuffer = resutss;

    }
Run Code Online (Sandbox Code Playgroud)

将本机dll导入C#:

[DllImport(".\\Modules_Native\\ImageData.dll", EntryPoint = "LoadData")]
private extern static void LoadData(out IntPtr data, string fileName);
Run Code Online (Sandbox Code Playgroud)

当函数返回数据时,将指向数组,您可以使用Marshal类读取内容.我想你会把它复制到一个新的字节arra y.

byte[] buffer = new byte[256*256];
buffer = Marshal.Copy(LoadData(buffer ,"D:\\myPic.tif"), buffer , 0, buffer.Length);
Run Code Online (Sandbox Code Playgroud)