110,572
社区成员
发帖
与我相关
我的任务
分享
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
piblic byte[ ] name;
// 一般 C 那边的参数都会是 char * 对长度不敏感,只会按 C 格式字符串来处理
// 结构中如果是 char name[512] 这里你就不能定义为 1024,因为影响了你的结构布局
// SizeConst 这个写成 1024,那么 name 必须初始化为 1024 长度
name = new byte[1024];
// 也就不能再让 name 直接得到 GetBytes 的返回值
// 我记得 GetBytes 有重载是写入你自己的 byte[] 而不是获取一个返回的 byte[]
// 尾部清零,写入的长度应该是 UTF8.GetBytesCount() 吧?
// 另一种方式就用 Marshal 直接分配非托管内存,将数据 copy 过去
// C# 中会将参数声明为 IntPtr
// C# 的函数声明与 dll 中的函数声明没有什么必然对应关系,
// 你只要清楚在调用过程中托管内存与非托管内存之间传送了什么,都可以写出一个正确的 C# 声明并给出正确的值