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)
显然它还没有工作,但它提出了我想做的想法.所以我想知道如何使这项工作,以及正确的方法是什么.非常感谢您的教育.
试试这个
// 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)
| 归档时间: |
|
| 查看次数: |
4452 次 |
| 最近记录: |