嗨,我一直在努力为要在 C# 中使用的第三方 C 库的 dll 创建一个包装器。
假设我有库中的 C 函数:
void functionA(byte data[16], byte buffer[8]);
使用以下代码包装上面的代码是否正确?
[DllImport("C.dll",CallingConvention=CallingConvention.Cdecl)]
static extern void functionA(byte[] data, byte[] buffer)
不,该声明仅对byte *data
有效,它是指向数组的指针。
您拥有的是一个固定大小的数组,为此您需要以下内容
[DllImport("C.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void functionA(
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16]
byte[] data,
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8]
byte[] buffer)