Como criar uma união C/C++ usando atributos (Visual Basic)
Usando atributos, você pode personalizar como as estruturas são dispostas na memória. Por exemplo, você pode criar o que é conhecido como uma união em C/C++ usando os StructLayout(LayoutKind.Explicit)
atributos e FieldOffset
.
Exemplo 1
Neste segmento de código, todos os campos de TestUnion
início no mesmo local na memória.
' 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
Exemplo 2
A seguir está outro exemplo em que os campos começam em diferentes locais explicitamente definidos.
' 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
Os dois campos inteiros i1
e i2
, compartilham os mesmos locais de memória que lg
. Esse tipo de controle sobre o layout struct é útil ao usar a chamada de plataforma.
Consulte também
Colabore connosco no GitHub
A origem deste conteúdo pode ser encontrada no GitHub, onde também pode criar e rever problemas e pedidos Pull. Para mais informações, consulte o nosso guia do contribuidor.