UnmanagedType UnmanagedType UnmanagedType UnmanagedType Enum

Определение

Определяет порядок маршалинга параметров или полей в неуправляемый код.Identifies how to marshal parameters or fields to unmanaged code.

public enum class UnmanagedType
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum UnmanagedType
type UnmanagedType = 
Public Enum UnmanagedType
Наследование
UnmanagedTypeUnmanagedTypeUnmanagedTypeUnmanagedType
Атрибуты

Поля

AnsiBStr AnsiBStr AnsiBStr AnsiBStr 35

Строка однобайтовых знаков ANSI с префиксом, обозначающим ее длину.An ANSI character string that is a length-prefixed single byte. Этот элемент можно использовать для типа данных String.You can use this member on the String data type.

AsAny AsAny AsAny AsAny 40

Динамический тип, который определяет тип объекта во время выполнения и маршалирует объекта как объекта данного типа.A dynamic type that determines the type of an object at run time and marshals the object as that type. Этот член является допустимым только для методов вызова неуправляемого кода.This member is valid for platform invoke methods only.

Bool Bool Bool Bool 2

4-байтовое логическое значение (true != 0, false = 0).A 4-byte Boolean value (true != 0, false = 0). Это тип BOOL платформы Win32.This is the Win32 BOOL type.

BStr BStr BStr BStr 19

Двухбайтовая строка знаков Юникода с префиксом, обозначающим ее длину.A Unicode character string that is a length-prefixed double byte. Этот элемент, являющийся строкой, определенной в COM по умолчанию, можно использовать для типа данных String.You can use this member, which is the default string in COM, on the String data type.

ByValArray ByValArray ByValArray ByValArray 30

Если свойство Value равно ByValArray, то для указания числа элементов массива должно быть задано поле SizeConst.When the Value property is set to ByValArray, the SizeConst field must be set to indicate the number of elements in the array. Если требуется различать типы строк, поле ArraySubType может содержать тип UnmanagedType элементов массива.The ArraySubType field can optionally contain the UnmanagedType of the array elements when it is necessary to differentiate among string types. UnmanagedType можно использовать только для массива, элементы которого отображаются как поля в структуре.You can use this UnmanagedType only on an array that whose elements appear as fields in a structure.

ByValTStr ByValTStr ByValTStr ByValTStr 23

Используется для встроенных массивов знаков фиксированной длины, появляющихся в структуре.Used for in-line, fixed-length character arrays that appear within a structure. Типы ByValTStr ведут себя как строки с фиксированным размером в стиле C в структуре (например, char s [5]).ByValTStr types behave like C-style, fixed-size strings inside a structure (for example, char s[5]). Тип символа, используемый с ByValTStr, определяется аргументом CharSet атрибута StructLayoutAttribute, примененным к содержащей его структуре.The character type used with ByValTStr is determined by the CharSet argument of the StructLayoutAttribute attribute applied to the containing structure. Для задания размера массива всегда следует использовать поле SizeConst.Always use the SizeConst field to indicate the size of the array.

Currency Currency Currency Currency 15

Тип валюты.A currency type. Используется в Decimal для маршалинга десятичного значения как типа денежной единицы COM, вместо Decimal.Used on a Decimal to marshal the decimal value as a COM currency type instead of as a Decimal.

CustomMarshaler CustomMarshaler CustomMarshaler CustomMarshaler 44

Задает класс настраиваемых модулей маршалинга при использовании с полем MarshalType или MarshalTypeRef.Specifies the custom marshaler class when used with the MarshalType or MarshalTypeRef field. Поле MarshalCookie можно использовать для передачи дополнительных сведений настраиваемому модулю маршалинга.The MarshalCookie field can be used to pass additional information to the custom marshaler. Этот элемент можно использовать для всех ссылочных типов.You can use this member on any reference type. Этот член допустим только для параметров и возвращаемых значений.This member is valid for parameters and return values only. Его нельзя использовать в полях.It cannot be used on fields.

Error Error Error Error 45

Собственный тип, связанный с I4 или U4, который приводит к экспорту параметра как значения HRESULT в экспортированной библиотеке типов.A native type that is associated with an I4 or an U4 and that causes the parameter to be exported as an HRESULT in the exported type library.

FunctionPtr FunctionPtr FunctionPtr FunctionPtr 38

Целое число, которое может использоваться как указатель функции в стиле языка С.An integer that can be used as a C-style function pointer. Этот член можно использовать для типа данных Delegate или типа, наследуемого от Delegate.You can use this member on a Delegate data type or on a type that inherits from a Delegate.

HString HString HString HString 47

Строка Среда выполнения WindowsWindows Runtime.A Среда выполнения WindowsWindows Runtime string. Этот элемент можно использовать для типа данных String.You can use this member on the String data type.

I1 I1 I1 I1 3

1-байтовое целое число со знаком.A 1-byte signed integer. Этот элемент можно использовать для преобразования значения типа Boolean в 1-байтовое значение bool в стиле языка C (true = 1, false = 0).You can use this member to transform a Boolean value into a 1-byte, C-style bool (true = 1, false = 0).

I2 I2 I2 I2 5

2-байтовое целое число со знаком.A 2-byte signed integer.

I4 I4 I4 I4 7

4-байтовое целое число со знаком.A 4-byte signed integer.

I8 I8 I8 I8 9

8-байтовое целое число со знаком.An 8-byte signed integer.

IDispatch IDispatch IDispatch IDispatch 26

Указатель COM IDispatch (Object в Microsoft Visual Basic 6.0).A COM IDispatch pointer (Object in Microsoft Visual Basic 6.0).

IInspectable IInspectable IInspectable IInspectable 46

Указатель интерфейса Среда выполнения WindowsWindows Runtime.A Среда выполнения WindowsWindows Runtime interface pointer. Этот элемент можно использовать для типа данных Object .You can use this member on the Object data type.

Interface Interface Interface Interface 28

Указатель интерфейса COM.A COM interface pointer. Идентификатор Guid интерфейса получен из класса метаданных.The Guid of the interface is obtained from the class metadata. Этот элемент можно использовать для указания точного типа интерфейса или типа интерфейса, используемого по умолчанию при применении к классу.Use this member to specify the exact interface type or the default interface type if you apply it to a class. Этот элемент определяет такое же поведение, что и IUnknown, при его применении к типу данных Object.This member produces the same behavior as IUnknown when you apply it to the Object data type.

IUnknown IUnknown IUnknown IUnknown 25

Указатель IUnknown COM.A COM IUnknown pointer. Этот элемент можно использовать для типа данных Object.You can use this member on the Object data type.

LPArray LPArray LPArray LPArray 42

Указатель на первый элемент массива в стиле языка C.A pointer to the first element of a C-style array. При маршалинге из управляемого кода в неуправляемый длина массива определяется исходя из длины управляемого массива.When marshaling from managed to unmanaged code, the length of the array is determined by the length of the managed array. При маршалинге из неуправляемого кода в управляемый длина массива определяется исходя из значений полей SizeConst и SizeParamIndex, за которыми, если требуется различать тип строк, следует тип элементов неуправляемого массива.When marshaling from unmanaged to managed code, the length of the array is determined from the SizeConst and SizeParamIndex fields, optionally followed by the unmanaged type of the elements within the array when it is necessary to differentiate among string types.

LPStr LPStr LPStr LPStr 20

Однобайтовая строка знаков ANSI, заканчивающаяся нулем.A single byte, null-terminated ANSI character string. Этот член можно использовать для типов данных String и StringBuilder.You can use this member on the String and StringBuilder data types.

LPStruct LPStruct LPStruct LPStruct 43

Указатель на структуру в стиле языка C, используемую для маршалинга управляемых форматируемых классов.A pointer to a C-style structure that you use to marshal managed formatted classes. Этот член является допустимым только для методов вызова неуправляемого кода.This member is valid for platform invoke methods only.

LPTStr LPTStr LPTStr LPTStr 22

Строка символов, зависящих от платформы: ANSI для Windows 98, Юникод для Windows NT и Windows XP.A platform-dependent character string: ANSI on Windows 98, and Unicode on Windows NT and Windows XP. Это значение поддерживается только для вызова неуправляемого кода и не используется для COM-взаимодействия, поскольку экспортирование строки типа LPTStr не поддерживается.This value is supported only for platform invoke and not for COM interop, because exporting a string of type LPTStr is not supported.

LPUTF8Str LPUTF8Str LPUTF8Str LPUTF8Str 48

Указатель на строку в кодировке UTF-8.A pointer to a UTF-8 encoded string.

LPWStr LPWStr LPWStr LPWStr 21

2-байтовая строка символов Юникода, заканчивающаяся нулем.A 2-byte, null-terminated Unicode character string. Нельзя использовать значение LPWStr с неуправляемой строкой, если только эта строка не была создана с помощью неуправляемой функции CoTaskMemAlloc.You cannot use the LPWStr value with an unmanaged string unless the string was created by using the unmanaged CoTaskMemAlloc function.

R4 R4 R4 R4 11

4-байтовое число с плавающей запятой.A 4-byte floating-point number.

R8 R8 R8 R8 12

8-байтовое число с плавающей запятой.An 8-byte floating-point number.

SafeArray SafeArray SafeArray SafeArray 29

SafeArray — это описывающий сам себя массив, передающий тип, ранг и границы соответствующего массива данных.A SafeArray, which is a self-describing array that carries the type, rank, and bounds of the associated array data. Этот элемент можно использовать с полем SafeArraySubType, чтобы переопределить тип элемента, заданный по умолчанию.You can use this member with the SafeArraySubType field to override the default element type.

Struct Struct Struct Struct 27

Значение типа VARIANT, используемое для маршалинга управляемых форматируемых классов и типов значений.A VARIANT, which is used to marshal managed formatted classes and value types.

SysInt SysInt SysInt SysInt 31

Зависящее от платформы целое число со знаком: 4 байта в 32-разрядной Windows, 8 байт в 64-разрядной Windows.A platform-dependent, signed integer: 4 bytes on 32-bit Windows, 8 bytes on 64-bit Windows.

SysUInt SysUInt SysUInt SysUInt 32

Зависящее от платформы целое число без знака: 4 байта в 32-разрядной Windows, 8 байт в 64-разрядной Windows.A platform-dependent, unsigned integer: 4 bytes on 32-bit Windows, 8 bytes on 64-bit Windows.

TBStr TBStr TBStr TBStr 36

Зависящая от платформы строка char, предваряемая длиной: ANSI для Windows 98, Юникод для Windows NT.A length-prefixed, platform-dependent char string: ANSI on Windows 98, Unicode on Windows NT. Этот элемент, аналогичный BSTR, используется редко.You rarely use this BSTR-like member.

U1 U1 U1 U1 4

1-байтовое целое число без знака.A 1-byte unsigned integer.

U2 U2 U2 U2 6

2-байтовое целое число без знака.A 2-byte unsigned integer.

U4 U4 U4 U4 8

4-байтовое целое число без знака.A 4-byte unsigned integer.

U8 U8 U8 U8 10

8-байтовое целое число без знака.An 8-byte unsigned integer.

VariantBool VariantBool VariantBool VariantBool 37

2-байтовое значение типа VARIANT_BOOL, определенное OLE (true != -1, false = 0).A 2-byte, OLE-defined VARIANT_BOOL type (true = -1, false = 0).

VBByRefStr VBByRefStr VBByRefStr VBByRefStr 34

Значение, позволяющее Visual Basic изменять строку в неуправляемом коде и получать результаты, отраженные в управляемом коде.A value that enables Visual Basic to change a string in unmanaged code and have the results reflected in managed code. Это значение поддерживается только для вызова неуправляемого кода.This value is only supported for platform invoke.

Примеры

В следующем фрагменте кода показано, как объявить в управляемом исходном коде неуправляемый интерфейс, реализованный COM-компонентом.The following code fragment demonstrates how to declare, in managed source code, an unmanaged interface implemented by a COM component. System.Runtime.InteropServices.ComImportAttribute Атрибут предотвращаетэкспортинтерфейсаIMyStorage обратно для использования COM.The System.Runtime.InteropServices.ComImportAttribute attribute prevents the IMyStorage interface from being exported back for use by COM. (COM-клиенты должны использовать существующий COM-компонент напрямую.) В этом примере MarshalAsAttribute указывает несколько UnmanagedType элементов, которые представляют типы, используемые исходным COM-интерфейсом.(COM clients should use the existing COM component directly.) In this example, MarshalAsAttribute specifies several UnmanagedType members, which represent the types used by the original COM interface.

using namespace System;
using namespace System::Runtime::InteropServices;

// If you do not have a type library for an interface
// you can redeclare it using ComImportAttribute.
// This is how the interface would look in an idl file.
//[
//object,
//uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
//dual, helpstring("IMyStorage Interface"),
//pointer_default(unique)
//]
//interface IMyStorage : IDispatch
//{
// [id(1)]
// HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
// [id(2)]
// HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
// [id(3)]
// HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
// [id(4), propget]
// HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
//};
// This is the managed declaration.

[ComImport]
[Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")]
interface class IMyStorage
{
   [DispId(1)]
   Object^ GetItem( [In,MarshalAs(UnmanagedType::BStr)]String^ bstrName );

   //[return : MarshalAs(UnmanagedType::Interface)]

   [DispId(2)]
   void GetItems( [In,MarshalAs(UnmanagedType::BStr)]String^ bstrLocation, [Out,MarshalAs(UnmanagedType::SafeArray,
   SafeArraySubType=VarEnum::VT_VARIANT)]array<Object^>^Items );

   [DispId(3)]
   void GetItemDescriptions( [In]String^ bstrLocation, [In,Out,MarshalAs(UnmanagedType::SafeArray)]array<Object^>^varDescriptions );

   property bool IsEmpty 
   {
      [DispId(4)]
      [returnvalue:MarshalAs(UnmanagedType::VariantBool)]
      bool get();
   }
};
using System;
using System.Runtime.InteropServices;

namespace MyModule
{
    // If you do not have a type library for an interface
    // you can redeclare it using ComImportAttribute.

    // This is how the interface would look in an idl file.

    //[
    //object,
    //uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
    //dual,	helpstring("IMyStorage Interface"),
    //pointer_default(unique)
    //]
    //interface IMyStorage : IDispatch
    //{
    //	[id(1)]
    //	HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
    //	[id(2)]
    //	HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
    //	[id(3)]
    //	HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
    //	[id(4), propget]
    //	HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
    //};

    // This is the managed declaration.

    [ComImport]
    [Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")]
    public interface IMyStorage  
    {
        [DispId(1)]
        [return : MarshalAs( UnmanagedType.Interface )]
        Object GetItem( [In, MarshalAs( UnmanagedType.BStr )] String bstrName );

        [DispId(2)]
        void GetItems( [In, MarshalAs( UnmanagedType.BStr )] String bstrLocation, 
            [Out, MarshalAs( UnmanagedType.SafeArray, 
                      SafeArraySubType = VarEnum.VT_VARIANT )] out Object[] Items );
                
                
        [DispId(3)]
        void GetItemDescriptions( [In] String bstrLocation, 
            [In, Out, MarshalAs( UnmanagedType.SafeArray )] ref Object[] varDescriptions );

        bool IsEmpty 
        {
            [DispId(4)]
            [return : MarshalAs( UnmanagedType.VariantBool )]
            get;
        }
    }
}
Imports System.Runtime.InteropServices

Module MyModule
    ' If you do not have a type library for an interface
    ' you can redeclare it using ComImportAttribute.

    ' This is how the interface would look in an idl file.

    '[
    'object,
    'uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
    'dual,	helpstring("IMyStorage Interface"),
    'pointer_default(unique)
    ']
    'interface IMyStorage : IDispatch
    '{
    '	[id(1)]
    '	HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
    '	[id(2)]
    '	HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
    '	[id(3)]
    '	HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
    '	[id(4), propget]
    '	HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
    '};

    ' This is the managed declaration.

    <ComImport(), Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")> _
    Public Interface IMyStorage
        <DispId(1)> _
        Function GetItem(<InAttribute(), MarshalAs(UnmanagedType.BStr)> ByVal bstrName As String) _
           As <MarshalAs(UnmanagedType.Interface)> Object

        <DispId(2)> _
        Function GetItems(<InAttribute(), MarshalAs(UnmanagedType.BStr)> ByVal bstrLocation As String, _
           <OutAttribute(), MarshalAs(UnmanagedType.SafeArray, SafeArraySubType := VarEnum.VT_VARIANT)> _
                                      ByVal Items() As Object)

        <DispId(3)> _
        Function GetItemDescriptions(<InAttribute()> ByVal bstrLocation As String, _
           <InAttribute(), OutAttribute(), _
                      MarshalAs(UnmanagedType.SafeArray)> ByRef varDescriptions() As Object)

        <DispId(4)> _
        ReadOnly Property IsEmpty(<MarshalAs(UnmanagedType.VariantBool)> ByVal bEmpty As Boolean)

    End Interface
End Module

Комментарии

Используйте перечисление с атрибутом, чтобы указать способ маршалирования типов во время взаимодействия с неуправляемым кодом. System.Runtime.InteropServices.MarshalAsAttribute UnmanagedTypeUse the UnmanagedType enumeration with the System.Runtime.InteropServices.MarshalAsAttribute attribute to specify how types are marshaled during interoperation with unmanaged code. Это перечисление можно использовать для маршалирования кода с помощью простых типов значений (I1, I2, I4, i8, R4, R8, U2, U4 и U8), неуправляемых типов, недоступных в .NET Framework и различных прочих типах.You can use this enumeration to marshal code using simple value types (I1, I2, I4, I8, R4, R8, U2, U4, and U8), unmanaged types that are unavailable in the .NET Framework, and various miscellaneous types.

Дополнительные сведения см. в разделе Взаимодействие с неуправляемым кодом.For more information, see Interoperating with Unmanaged Code.

Применяется к

Дополнительно