Gör så här: Skapa en C/C++-union med hjälp av attribut (Visual Basic)

Med hjälp av attribut kan du anpassa hur structs läggs ut i minnet. Du kan till exempel skapa det som kallas en union i C/C++ med hjälp av attributen StructLayout(LayoutKind.Explicit) och FieldOffset .

Exempel 1

I det här kodsegmentet börjar alla fält TestUnion på samma plats i minnet.

' Add an Imports statement for System.Runtime.InteropServices.

<System.Runtime.InteropServices.StructLayout(
      System.Runtime.InteropServices.LayoutKind.Explicit)>
Structure TestUnion
    <System.Runtime.InteropServices.FieldOffset(0)>
    Public i As Integer

    <System.Runtime.InteropServices.FieldOffset(0)>
    Public d As Double

    <System.Runtime.InteropServices.FieldOffset(0)>
    Public c As Char

    <System.Runtime.InteropServices.FieldOffset(0)>
    Public b As Byte
End Structure

Exempel 2

Följande är ett annat exempel där fälten börjar på olika uttryckligen angivna platser.

' Add an Imports statement for System.Runtime.InteropServices.

 <System.Runtime.InteropServices.StructLayout(
      System.Runtime.InteropServices.LayoutKind.Explicit)>
Structure TestExplicit
     <System.Runtime.InteropServices.FieldOffset(0)>
     Public lg As Long

     <System.Runtime.InteropServices.FieldOffset(0)>
     Public i1 As Integer

     <System.Runtime.InteropServices.FieldOffset(4)>
     Public i2 As Integer

     <System.Runtime.InteropServices.FieldOffset(8)>
     Public d As Double

     <System.Runtime.InteropServices.FieldOffset(12)>
     Public c As Char

     <System.Runtime.InteropServices.FieldOffset(14)>
     Public b As Byte
 End Structure

De två heltalsfälten i1 och i2, delar samma minnesplatser som lg. Den här typen av kontroll över struct-layouten är användbar när du använder plattformsanrop.

Se även