PInvoke 返回带联合的 C 类型
如何 IP/调用返回联合结构的 C 函数?
How would I P/Invoke a C function which returns a union'ed struct?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何 IP/调用返回联合结构的 C 函数?
How would I P/Invoke a C function which returns a union'ed struct?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
您需要使用 显式的 StructLayout 和 FieldOffset 属性。
使用示例:
You would need to use a StructLayout of explicit and the FieldOffset attribute.
An example of usage:
要为 C 语言创建一个简单的结构,可以在结构上使用 [StructLayout(LayoutKind.Sequential)]。要为 C 做一个简单的联合,您可以使用 [StructLayout(LayoutKind.Explicit)],并为所有字段指定一个 [FieldOffset(0)]。对于更复杂的结构,可以适当地将这两种结构嵌套在一起!如果这不能正常工作,您始终可以分析 C 中生成的结构,找出所有字段的位置,并使用 LayoutKind.Explicit 为每个字段提供正确的字段偏移量。
To do a simple struct for C, you use [StructLayout(LayoutKind.Sequential)] on a structure. To do a simple union for C, you use [StructLayout(LayoutKind.Explicit)], and give all fields a [FieldOffset(0)]. For more complex structures, nest these two kinds of structures inside each other as appropriate! If this doesn't work correctly you can always analyse the structure generated in C, figure out where all the fields are, and use LayoutKind.Explicit with the correct field offsets for every field.