UnmanagedType Enumeração
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Identifica como escalar parâmetros ou campos para código não gerido.
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
| Name | Valor | Description |
|---|---|---|
| Bool | 2 | Um valor booleano de 4 bytes ( |
| I1 | 3 | Um inteiro assinado de 1 byte. Pode usar este elemento para transformar um valor booleano num estilo |
| U1 | 4 | Um inteiro sem sinal de 1 byte. |
| I2 | 5 | Um inteiro assinado de 2 bytes. |
| U2 | 6 | Um inteiro sem sinal de 2 bytes. |
| I4 | 7 | Um inteiro assinado de 4 bytes. |
| U4 | 8 | Um inteiro sem sinal de 4 bytes. |
| I8 | 9 | Um inteiro assinado de 8 bytes. |
| U8 | 10 | Um inteiro sem sinal de 8 bytes. |
| R4 | 11 | Um número de vírgula flutuante de 4 bytes. |
| R8 | 12 | Um número de vírgula flutuante de 8 bytes. |
| Currency | 15 | Um tipo de moeda. Usado em a Decimal para marshar 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 com prefixo de comprimento. Pode usar este membro, que é a string padrão no COM, no String tipo de dado. |
| LPStr | 20 | Uma cadeia de caracteres ANSI terminada por um único byte. Pode usar este membro nos String tipos de dados e StringBuilder . |
| LPWStr | 21 | Uma cadeia de caracteres Unicode com terminação nula de 2 bytes. Não podes usar o |
| LPTStr | 22 | Uma cadeia de caracteres Unicode. Este valor é suportado apenas para invocação de plataforma e não para interoperabilidade COM, pois não é suportado exportar uma cadeia de tipos |
| ByValTStr | 23 | Usado para arrays de caracteres em linha, de comprimento fixo, que aparecem dentro de uma estrutura.
|
| IUnknown | 25 | Um ponteiro COM |
| IDispatch | 26 | Um ponteiro COM |
| Struct | 27 | Um VARIANT, que é usado para organizar classes formatadas geridas e tipos de valor. |
| Interface | 28 | Um ponteiro de interface COM. O Guid da interface é obtido a partir dos metadados da classe. Use este membro para especificar o tipo exato de interface ou o tipo de interface padrão se o aplicar a uma classe. Este membro produz o mesmo comportamento que IUnknown quando se aplica ao Object tipo de dado. |
| SafeArray | 29 | Um , que é um array auto-descritivo que transporta o tipo, o posto e os limites dos dados associados ao |
| ByValArray | 30 | Quando a Value propriedade está definida para |
| SysInt | 31 | Um inteiro com assinatura dependente da plataforma: 4 bytes no Windows de 32 bits, 8 bytes no Windows de 64 bits. |
| SysUInt | 32 | Um inteiro não assinado, dependente da plataforma: 4 bytes no Windows de 32 bits, 8 bytes no Windows de 64 bits. |
| VBByRefStr | 34 | Um valor que permite ao Visual Basic alterar uma cadeia de caracteres em código não gerido e ter os resultados refletidos no código gerido. Este valor é suportado apenas para invocação de plataforma. |
| AnsiBStr | 35 | Uma cadeia de caracteres ANSI que é um byte único com prefixo de comprimento. Pode usar este membro no String tipo de dado. |
| TBStr | 36 | Uma string Unicode com |
| VariantBool | 37 | Um tipo de VARIANT_BOOL definido por OLE de 2 bytes ( |
| FunctionPtr | 38 | Um inteiro que pode ser usado como apontador de função ao estilo C. Pode usar este membro num Delegate tipo de dados ou num tipo que herda de um Delegate. |
| AsAny | 40 | Um tipo dinâmico que determina o tipo de objeto em tempo de execução e marshela o objeto como esse tipo. Este membro é válido apenas para métodos de invocação de plataforma. |
| LPArray | 42 | Um apontador para o primeiro elemento de um array ao estilo C. Ao fazer marshaling de código gerido para código não gerido, o comprimento do array é determinado pelo comprimento do array gerido. Ao escalar de código não gerido para código gerido, o comprimento do array é determinado a partir dos SizeConst campos e, SizeParamIndex opcionalmente seguido pelo tipo não gerido dos elementos dentro do array quando for necessário diferenciar entre tipos de string. |
| LPStruct | 43 | Um apontador para uma estrutura ao estilo C que usas para organizar classes formatadas geridas. Este membro é válido apenas para métodos de invocação de plataforma. |
| CustomMarshaler | 44 | Especifica a classe marshaler personalizada quando usada com o MarshalType campo ou MarshalTypeRef . O MarshalCookie campo pode ser usado para passar informações adicionais ao marshaler personalizado. Pode usar este membro em qualquer tipo de referência. Este membro é válido apenas para parâmetros e valores de retorno. 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 um HRESULT na biblioteca de tipos exportados. |
| IInspectable | 46 | Um ponteiro de interface do Windows Runtime. Pode usar este membro no Object tipo de dado. O suporte incorporado para WinRT foi removido em .NET 5. |
| HString | 47 | Uma cadeia de Windows Runtime. Pode usar este membro no String tipo de dado. O suporte incorporado para WinRT foi removido em .NET 5. Veja Tipos anteriormente suportados incorporados para soluções alternativas. |
| LPUTF8Str | 48 | Um ponteiro para uma cadeia codificada em UTF-8. |
Exemplos
O seguinte fragmento de código demonstra como declarar, em código-fonte gerido, uma interface não gerida implementada por um componente COM. O System.Runtime.InteropServices.ComImportAttribute atributo impede que a IMyStorage interface seja exportada de volta para uso pela 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
Observações
Use a UnmanagedType enumeração com o System.Runtime.InteropServices.MarshalAsAttribute atributo para especificar como os tipos são organizados durante a interoperação com código não gerido. Pode usar esta enumeração para fazer marshal de código usando tipos de valores simples (I1, I2, I4, I8, R4, R8, U2, U4 e U8), tipos não geridos que não estão disponíveis no .NET Framework, e vários tipos diversos.
Para obter mais informações, consulte Interoperando com código não gerenciado.