封送结构体同时保持其“非托管”状态
我正在调用一个 DLL,该 DLL 返回一个结构指针的 void** 列表,所有指针的类型都相同。 根据我读过的内容,为了投射并获得我的如果结构不在该列表中,则该结构需要被视为非托管结构。我试图封送的结构的主要罪魁祸首是来自 C 端的以下两个字段:
char name[1024];
int crop[4];
大多数指南建议在托管端的相应结构上使用 string 或 int[],但是拥有这些字段使其成为托管结构,因此无法从 void** 列表中提取。
我可以通过什么方式封送这些字段来为我提供非托管结构?
I'm p-invoking into a DLL that returns a void** list of struct pointers, all of the same type. From what I've read, in order to cast and get my structure out of that list, the struct needs to be considered unmanaged. The main culprits to the struct I'm trying to marshal over are the following two fields from the C side:
char name[1024];
int crop[4];
Most guides suggest using string or int[] on the corresponding struct on the managed side, but that having those fields makes it into a managed struct and thus incapable of extracting from the void** list.
What's another way I can marshal these fields that gives me an unmanaged struct?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您像这样声明结构,则无需帮助或不需要 unsafe 关键字即可对结构进行编组:
使用 Marshal.PtrToStructure() 将 void* 转换为结构。
The structure will marshal without help or need for the unsafe keyword if you declare it like this:
Convert the void* to the structure with Marshal.PtrToStructure().
您可以使用 fixed 关键字创建固定大小的缓冲区数据结构中的数组:
You can use the fixed keyword to create a buffer with a fixed size array in a data structure:
您需要在结构上的该点添加一行,如图所示...
您需要仔细检查属性位 UnmanagedType 中的最后一位...
希望有帮助,
此致,
汤姆.
You need to add a line in that point on the struct as shown...
You need to double check on the last bit in the attribute bit, UnmanagedType...
Hope that helps,
Best regards,
Tom.