代码之家  ›  专栏  ›  技术社区  ›  joemoe

pinvoke返回带有union的C类型

  •  1
  • joemoe  · 技术社区  · 16 年前

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

    2 回复  |  直到 16 年前
        1
  •  4
  •   DanStory    16 年前

    你需要使用 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
    
        2
  •  2
  •   KernelJ    16 年前

    若要为C执行简单结构,请在结构上使用[structlayout(layoutkind.sequential)]。要为C执行简单的联合,可以使用[structlayout(layoutkind.explicit)],并为所有字段提供一个[fieldoffset(0)]。对于更复杂的结构,将这两种结构适当地嵌套在一起!如果这样做不正确,您可以始终分析在C中生成的结构,找出所有字段的位置,并使用layoutKind.Explicit对每个字段使用正确的字段偏移量。