作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
示例 C API 签名:
void Func(unsigned char* bytes);
在 C 中,当我想传递一个指向数组的指针时,我可以这样做:
unsigned char* bytes = new unsigned char[1000];
Func(bytes); // call
如何将上述 API 转换为 P/Invoke,以便我可以将指针传递给 C# 字节数组?
最佳答案
传递字节数组的最简单方法是将导入语句中的参数声明为字节数组。
[DllImport EntryPoint="func" CharSet=CharSet.Auto, SetLastError=true]
public extern static void Func(byte[]);
byte[] ar = new byte[1000];
Func(ar);
您还应该能够将参数声明为 IntPtr 并手动编码(marshal)数据。
[DllImport EntryPoint="func" CharSet=CharSet.Auto, SetLastError=true]
public extern static void Func(IntPtr p);
byte[] ar = new byte[1000];
IntPtr p = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(byte)) * ar.Length);
Marshal.Copy(ar, 0, p, ar.Length);
Func(p);
Marshal.FreeHGlobal(p);
关于c# - 如何在 C# 中使用 p/invoke 将指针传递给数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/289076/
我是一名优秀的程序员,十分优秀!