UnmanagedType Перечисление
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет порядок маршалинга параметров или полей в неуправляемый код.
public enum class UnmanagedType
public enum UnmanagedType
[System.Serializable]
public enum UnmanagedType
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum UnmanagedType
type UnmanagedType =
[<System.Serializable>]
type UnmanagedType =
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type UnmanagedType =
Public Enum UnmanagedType
- Наследование
- Атрибуты
Поля
AnsiBStr | 35 | Строка однобайтовых знаков ANSI с префиксом, обозначающим ее длину. Этот элемент можно использовать для типа данных String. |
AsAny | 40 | Динамический тип, который определяет тип объекта во время выполнения и маршалирует объект как объекта данного типа. Этот член является допустимым только для методов вызова неуправляемого кода. |
Bool | 2 | 4-байтовое логическое значение ( |
BStr | 19 | Двухбайтовая строка символов Юникода с префиксом, обозначающим ее длину. Этот элемент, являющийся строкой, определенной в COM по умолчанию, можно использовать для типа данных String. |
ByValArray | 30 | Если свойство Value равно |
ByValTStr | 23 | Используется для встроенных массивов знаков фиксированной длины, появляющихся в структуре.
|
Currency | 15 | Тип валюты. Используется в Decimal для маршалинга десятичного значения как типа денежной единицы COM, вместо |
CustomMarshaler | 44 | Задает класс настраиваемых модулей маршалинга при использовании с полем MarshalType или MarshalTypeRef. Поле MarshalCookie можно использовать для передачи дополнительных сведений настраиваемому модулю маршалинга. Этот элемент можно использовать для всех ссылочных типов. Этот член допустим только для параметров и возвращаемых значений. Его нельзя использовать в полях. |
Error | 45 | Собственный тип, связанный с I4 или U4, который приводит к экспорту параметра как значения HRESULT в экспортированной библиотеке типов. |
FunctionPtr | 38 | Целое число, которое может использоваться как указатель функции в стиле языка С. Этот элемент можно использовать для типа данных Delegate или типа, наследуемого от Delegate. |
HString | 47 | Строка среды выполнения Windows. Этот элемент можно использовать для типа данных String. Встроенная поддержка WinRT была удалена в .NET 5. Обходной путь см. в статье Ранее встроенные поддерживаемые типы. |
I1 | 3 | 1-байтовое целое число со знаком. Этот элемент можно использовать для преобразования логического значения типа в 1-байтовое значение |
I2 | 5 | 2-байтовое целое число со знаком. |
I4 | 7 | 4-байтовое целое число со знаком. |
I8 | 9 | 8-байтовое целое число со знаком. |
IDispatch | 26 | Указатель COM |
IInspectable | 46 | Указатель интерфейса среды выполнения Windows. Этот элемент можно использовать для типа данных Object. Встроенная поддержка WinRT была удалена в .NET 5. |
Interface | 28 | Указатель интерфейса COM. Идентификатор Guid интерфейса получен из класса метаданных. Этот элемент можно использовать для указания точного типа интерфейса или типа интерфейса, используемого по умолчанию при применении к классу. Этот элемент определяет такое же поведение, что и IUnknown, при его применении к типу данных Object. |
IUnknown | 25 | Указатель COM |
LPArray | 42 | Указатель на первый элемент массива в стиле языка C. При маршалинге из управляемого кода в неуправляемый длина массива определяется исходя из длины управляемого массива. При маршалинге из неуправляемого кода в управляемый длина массива определяется исходя из значений полей SizeConst и SizeParamIndex, за которыми, если требуется различать тип строк, следует тип элементов неуправляемого массива. |
LPStr | 20 | Однобайтовая строка знаков ANSI, заканчивающаяся нулем. Этот элемент можно использовать для типов данных String и StringBuilder. |
LPStruct | 43 | Указатель на структуру в стиле языка C, используемую для маршалинга управляемых форматируемых классов. Этот член является допустимым только для методов вызова неуправляемого кода. |
LPTStr | 22 | Строка символов Юникода. Это значение поддерживается только для вызова неуправляемого кода и не используется для COM-взаимодействия, поскольку экспортирование строки типа |
LPUTF8Str | 48 | Указатель на строку в кодировке UTF-8. |
LPWStr | 21 | 2-байтовая строка символов Юникода, заканчивающаяся нулем. Нельзя использовать значение |
R4 | 11 | 4-байтовое число с плавающей запятой. |
R8 | 12 | 8-байтовое число с плавающей запятой. |
SafeArray | 29 |
|
Struct | 27 | Значение типа VARIANT, используемое для маршалинга управляемых форматируемых классов и типов значений. |
SysInt | 31 | Платформозависимое знаковое целое число: 4 байта в 32-разрядной Windows, 8 байт в 64-разрядной Windows. |
SysUInt | 32 | Платформозависимое знаковое целое число без знака: 4 байта в 32-разрядной Windows, 8 байт в 64-разрядной Windows. |
TBStr | 36 | Строка Юникода |
U1 | 4 | 1-байтовое целое число без знака. |
U2 | 6 | 2-байтовое целое число без знака. |
U4 | 8 | 4-байтовое целое число без знака. |
U8 | 10 | 8-байтовое целое число без знака. |
VariantBool | 37 | 2-байтовое значение типа VARIANT_BOOL, определенное OLE ( |
VBByRefStr | 34 | Значение, позволяющее Visual Basic изменять строку в неуправляемом коде и получать результаты, отраженные в управляемом коде. Это значение поддерживается только для вызова неуправляемого кода. |
Примеры
В следующем фрагменте кода показано, как объявить в управляемом исходном коде неуправляемый интерфейс, реализованный компонентом COM. Атрибут System.Runtime.InteropServices.ComImportAttribute предотвращает IMyStorage
экспорт интерфейса обратно для использования COM. (Клиенты COM должны напрямую использовать существующий компонент COM.) В этом примере MarshalAsAttribute указывает несколько UnmanagedType членов, которые представляют типы, используемые исходным COM-интерфейсом.
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
Комментарии
Используйте перечисление UnmanagedType с атрибутом , System.Runtime.InteropServices.MarshalAsAttribute чтобы указать способ маршалирования типов во время взаимодействия с неуправляемым кодом. Это перечисление можно использовать для маршалинга кода с помощью простых типов значений (I1, I2, I4, I8, R4, R8, U2, U4 и U8), неуправляемых типов, недоступных в .NET Framework, и различных типов.
Дополнительные сведения см. в разделе Взаимодействие с неуправляемым кодом.