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
Samarbeta med oss på GitHub
Källan för det här innehållet finns på GitHub, där du även kan skapa och granska ärenden och pull-begäranden. Se vår deltagarguide för mer information.