Udostępnij za pośrednictwem


Porady: tworzenie unii C/C++ przy użyciu atrybutów (Visual Basic)

Za pomocą atrybutów można dostosować sposób stosowania struktur w pamięci. Można na przykład utworzyć to, co jest znane jako unia w języku C/C++ przy użyciu StructLayout(LayoutKind.Explicit) atrybutów i FieldOffset .

Przykład 1

W tym segmencie kodu wszystkie pola TestUnion rozpoczynające się w tej samej lokalizacji w pamięci.

' 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

Przykład 2

Poniżej przedstawiono inny przykład, w którym pola zaczynają się od różnych jawnie ustawionych lokalizacji.

' 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

Dwa pola i1 liczb całkowitych i i2, współdzielą te same lokalizacje pamięci co lg. Ten rodzaj kontroli nad układem struktury jest przydatny podczas korzystania z wywołania platformy.

Zobacz też