如何 IP/Invoke 返回联合结构的 C 函数?
问问题
368 次
2 回答
4
您需要使用显式的StructLayout和FieldOffset属性。
使用示例:
<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 回答