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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för