Поделиться через


Практическое руководство. Создание союза C/C++ с помощью атрибутов (Visual Basic)

С помощью атрибутов можно настроить способ, с помощью которых структуры размещаются в памяти. Например, можно создать то, что называется объединением в C/C++ с помощью StructLayout(LayoutKind.Explicit) атрибутов и FieldOffset атрибутов.

Пример 1

В этом сегменте кода все поля TestUnion начинаются в одном и том же месте в памяти.

' 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

Пример 2

Ниже приведен еще один пример, в котором поля начинаются с разных явно заданных расположений.

' 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

Два целочисленных поля i1 и i2 совместно используют те же расположения памяти, что и lg. Этот вид управления макетом структуры полезен при использовании вызова платформенных функций.

См. также