C 定义
typedef struct {
const uint8_t* buf;
int bufLen;
} Info;
int Foo(Info* info);
C# 定义
[StructLayout(LayoutKind.Sequential)]
public struct Info
{
// [MarshalAs( ??? )]
public byte[] buf;
int bufLen
}
[DllImport(...)]
public static extern int Foo(ref Info info);
我无法弄清楚在 C# 结构定义中为MarshalAs
属性指定什么。byte[] buf
缓冲区是在 .NET 端分配的,它的长度在调用时是已知的。
在一个简单的小测试中:
var info = new Info {
buf = new byte[] {0x40, 0x50, 0x60, 0x70},
bufLen = 4,
};
Foo(ref info);
一切似乎都正常工作,但实际上我缓冲区中的数据不正确。从我看到的 DLL 中打印出来01 00 80 00
- 不确定那是什么。
我试过了:
- 不
MarshalAs
[MarshalAs(UnmanagedType.SafeArray)]
没有任何效果。
一般来说,我也真的不知道调试这类问题的最佳方法。