UnmanagedType Enumeração
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Identifica como fazer marshaling de parâmetros ou campos para código não gerenciado.
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
- Herança
- Atributos
Campos
| Nome | Valor | Description |
|---|---|---|
| Bool | 2 | Um valor booliano de 4 bytes ( |
| I1 | 3 | Um inteiro com sinal de 1 byte. Você pode usar esse membro para transformar um valor booliano em um estilo |
| U1 | 4 | Um inteiro sem sinal de 1 byte. |
| I2 | 5 | Um inteiro com sinal de 2 bytes. |
| U2 | 6 | Um inteiro sem sinal de 2 bytes. |
| I4 | 7 | Um inteiro com sinal de 4 bytes. |
| U4 | 8 | Um inteiro sem sinal de 4 bytes. |
| I8 | 9 | Um inteiro com sinal de 8 bytes. |
| U8 | 10 | Um inteiro sem sinal de 8 bytes. |
| R4 | 11 | Um número de ponto flutuante de 4 bytes. |
| R8 | 12 | Um número de ponto flutuante de 8 bytes. |
| Currency | 15 | Um tipo de moeda. Usado em um Decimal para marshalar o valor decimal como um tipo de moeda COM em vez de como um |
| BStr | 19 | Uma cadeia de caracteres Unicode que é um byte duplo prefixado por comprimento. Você pode usar esse membro, que é a cadeia de caracteres padrão em COM, no String tipo de dados. |
| LPStr | 20 | Uma única cadeia de caracteres ANSI com término nulo. Você pode usar esse membro nos String tipos e StringBuilder de dados. |
| LPWStr | 21 | Uma cadeia de caracteres Unicode com término nulo de 2 bytes. Você não pode usar o |
| LPTStr | 22 | Uma cadeia de caracteres Unicode. Esse valor tem suporte apenas para invocação de plataforma e não para interoperabilidade COM, pois não há suporte para exportar uma cadeia de caracteres do tipo |
| ByValTStr | 23 | Usado para matrizes de caracteres de comprimento fixo em linha que aparecem dentro de uma estrutura.
|
| IUnknown | 25 | Um ponteiro COM |
| IDispatch | 26 | Um ponteiro com |
| Struct | 27 | Uma VARIANT, que é usada para realizar marshaling de classes formatadas gerenciadas e tipos de valor. |
| Interface | 28 | Um ponteiro de interface COM. A Guid interface é obtida dos metadados de classe. Use esse membro para especificar o tipo de interface exato ou o tipo de interface padrão se você a aplicar a uma classe. Esse membro produz o mesmo comportamento de IUnknown quando você o aplica ao Object tipo de dados. |
| SafeArray | 29 | Um |
| ByValArray | 30 | Quando a Value propriedade é definida como |
| SysInt | 31 | Um inteiro com sinal dependente da plataforma: 4 bytes em Windows de 32 bits, 8 bytes em Windows de 64 bits. |
| SysUInt | 32 | Um inteiro sem sinal dependente da plataforma: 4 bytes em Windows de 32 bits, 8 bytes em Windows de 64 bits. |
| VBByRefStr | 34 | Um valor que permite que o Visual Basic altere uma cadeia de caracteres em código não gerenciado e tenha os resultados refletidos no código gerenciado. Esse valor só tem suporte para invocação de plataforma. |
| AnsiBStr | 35 | Uma cadeia de caracteres ANSI que é um byte único prefixado por comprimento. Você pode usar esse membro no String tipo de dados. |
| TBStr | 36 | Uma cadeia de caracteres Unicode |
| VariantBool | 37 | Um tipo de VARIANT_BOOL definido por OLE de 2 bytes ( |
| FunctionPtr | 38 | Um inteiro que pode ser usado como um ponteiro de função no estilo C. Você pode usar esse membro em um Delegate tipo de dados ou em um tipo que herda de um Delegate. |
| AsAny | 40 | Um tipo dinâmico que determina o tipo de um objeto em tempo de execução e faz marshaling do objeto como esse tipo. Esse membro é válido somente para métodos de invocação de plataforma. |
| LPArray | 42 | Um ponteiro para o primeiro elemento de uma matriz de estilo C. Ao fazer marshaling de código gerenciado para não gerenciado, o comprimento da matriz é determinado pelo comprimento da matriz gerenciada. Ao fazer marshaling de código não gerenciado para o código gerenciado, o comprimento da matriz é determinado a partir dos campos eSizeParamIndex, opcionalmente, seguido pelo tipo não gerenciado dos elementos dentro da matriz quando for necessário diferenciar entre os SizeConst tipos de cadeia de caracteres. |
| LPStruct | 43 | Um ponteiro para uma estrutura no estilo C que você usa para realizar marshaling de classes formatadas gerenciadas. Esse membro é válido somente para métodos de invocação de plataforma. |
| CustomMarshaler | 44 | Especifica a classe marshaler personalizada quando usada com o campo ou MarshalTypeRef o MarshalType campo. O MarshalCookie campo pode ser usado para passar informações adicionais para o marshaler personalizado. Você pode usar esse membro em qualquer tipo de referência. Esse membro é válido apenas para parâmetros e valores retornados. Não pode ser usado em campos. |
| Error | 45 | Um tipo nativo associado a um I4 ou um U4 e que faz com que o parâmetro seja exportado como HRESULT na biblioteca de tipos exportada. |
| IInspectable | 46 | Um ponteiro de interface Windows Runtime. Você pode usar esse membro no Object tipo de dados. O suporte Definido para WinRT foi removido no .NET 5. |
| HString | 47 | Uma cadeia de caracteres Windows Runtime. Você pode usar esse membro no String tipo de dados. O suporte Definido para WinRT foi removido no .NET 5. Consulte tipos anteriormente compatíveis com a solução alternativa. |
| LPUTF8Str | 48 | Um ponteiro para uma cadeia de caracteres codificada em UTF-8. |
Exemplos
O fragmento de código a seguir demonstra como declarar, no código-fonte gerenciado, uma interface não gerenciada implementada por um componente COM. O System.Runtime.InteropServices.ComImportAttribute atributo impede que a IMyStorage interface seja exportada novamente para uso pelo COM. (Os clientes COM devem usar diretamente o componente COM existente.) Neste exemplo, MarshalAsAttribute especifica vários UnmanagedType membros, que representam os tipos usados pela interface COM original.
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
Comentários
Use a UnmanagedType enumeração com o System.Runtime.InteropServices.MarshalAsAttribute atributo para especificar como os tipos são empacotados durante a interoperação com código não gerenciado. Você pode usar essa enumeração para empacotar código usando tipos de valor simples (I1, I2, I4, I8, R4, R8, U2, U4 e U8), tipos não gerenciados que não estão disponíveis no .NET Framework e vários tipos diversos.
Para mais informações, confira Interoperar com código não gerenciado.