1

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

4

2 回答 2

4

您需要使用显式的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
于 2009-12-13T06:52:33.607 回答
2

要为 C 做一个简单的结构,您可以在结构上使用 [StructLayout(LayoutKind.Sequential)]。要为 C 做一个简单的联合,您可以使用 [StructLayout(LayoutKind.Explicit)],并给所有字段一个 [FieldOffset(0)]。对于更复杂的结构,将这两种结构适当地嵌套在彼此内部!如果这不能正常工作,您始终可以分析 C 中生成的结构,找出所有字段的位置,并使用 LayoutKind.Explicit 为每个字段提供正确的字段偏移量。

于 2009-12-13T07:05:47.803 回答