PInvoke 返回带联合的 C 类型

发布于 2024-08-14 02:52:00 字数 28 浏览 6 评论 0原文

如何 IP/调用返回联合结构的 C 函数?

How would I P/Invoke a C function which returns a union'ed struct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

若有似无的小暗淡 2024-08-21 02:52:00

您需要使用 显式的 StructLayoutFieldOffset 属性。

使用示例:

<StructLayout(LayoutKind.Explicit, Size:=4)> _
   Public Structure DWord
      <FieldOffset(0)> Public Value As Int32
      <FieldOffset(0)> Public High As Int16
      <FieldOffset(2)> Public Low As Int16
   End Structure

You would need to use a StructLayout of explicit and the FieldOffset attribute.

An example of usage:

<StructLayout(LayoutKind.Explicit, Size:=4)> _
   Public Structure DWord
      <FieldOffset(0)> Public Value As Int32
      <FieldOffset(0)> Public High As Int16
      <FieldOffset(2)> Public Low As Int16
   End Structure
清浅ˋ旧时光 2024-08-21 02:52:00

要为 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文