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

何时应该显式指定StructLayout?

  •  6
  • biozinc  · 技术社区  · 17 年前

    我正忙于从C#调用DLL,突然发现需要定义自己的结构。很多文章都强制使用

    [StructLayout(LayoutKind.Sequential)]
    struct Foo ...
    

    3 回复  |  直到 17 年前
        1
  •  5
  •   Hans Passant    17 年前

    托管结构的内部布局未记录且不可发现。有意隐藏成员订单和包装等实施细节。使用[StructLayout]属性,可以强制P/Invoke封送器强制实施特定的布局和打包。

    默认值恰好与使代码正常工作所需的匹配只是一个意外。虽然不是很少见。请注意Type.StructLayoutAttribute属性。

        2
  •  1
  •   Mark Hurd    16 年前

    注意 VB Reference for Structure 暗示在备注中>行为>内存消耗,您确实需要指定StructLayout来确认内存布局,但是 StructLayoutAttribute “顺序状态”是Microsoft编译器中结构的默认状态。

        3
  •  0
  •   Jonathan C Dickinson    17 年前