c# - 如何在 C# 中使用 p/invoke 将指针传递给数组?

标签 c# c api pinvoke

示例 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/15441003/

相关文章:

c# - 是否可以在本地主机开发期间选择 Azure 服务配置?例如。云?

c# - 我的 wcf 应用程序中是否存在安全错误?

c# - 如何确定帐户的类型(AD 用户与 AD 组)?

c - 如何删除printf语句中的空格

C FILE指针,为什么不直接使用FILE类型呢?

javascript - 谷歌图表 : Assign value to different axis

api - 推特 API 问题

c# - 如何将小数点四舍五入到用户给出的最接近的小数值?

windows - 使用 Windows API 处理内存转储

c - 打印 UTF-16 字符串