UnmanagedType Enumeração

Definição

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
UnmanagedType
Atributos

Campos

Name Valor Description
Bool 2

Um valor booleano de 4 bytes (true != 0, false = 0). Este é o tipo do tipo Win32 BOOL.

I1 3

Um inteiro assinado de 1 byte. Pode usar este elemento para transformar um valor booleano num estilo bool C de 1 byte (true = 1, false = 0).

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 Decimal.

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 LPWStr valor com uma cadeia não gerida a menos que a cadeia tenha sido criada usando a função não gerida CoTaskMemAlloc .

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 LPTStr diferentes.

ByValTStr 23

Usado para arrays de caracteres em linha, de comprimento fixo, que aparecem dentro de uma estrutura. ByValTStr os tipos comportam-se como cadeias de tamanho fixo do estilo C dentro de uma estrutura (por exemplo, char s[5]). O tipo de carácter usado com ByValTStr é determinado pelo CharSet argumento do StructLayoutAttribute atributo aplicado à estrutura de contenção. Use sempre o SizeConst campo para indicar o tamanho do array.

IUnknown 25

Um ponteiro COM IUnknown . Pode usar este membro no Object tipo de dado.

IDispatch 26

Um ponteiro COM IDispatch (Object em Microsoft Visual Basic 6.0).

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 SafeArrayarray. Podes usar este membro com o SafeArraySubType campo para sobrescrever o tipo de elemento predefinido.

ByValArray 30

Quando a Value propriedade está definida para ByValArray, o SizeConst campo deve ser definido para indicar o número de elementos no array. O ArraySubType campo pode, opcionalmente, conter os UnmanagedType elementos do array quando for necessário diferenciar entre tipos de cadeia. Só podes usar isto UnmanagedType num array cujos elementos aparecem como campos numa estrutura.

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 char prefixo de comprimento. Raramente usas este membro semelhante ao BSTR.

VariantBool 37

Um tipo de VARIANT_BOOL definido por OLE de 2 bytes (true = -1, false = 0).

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.

Aplica-se a

Ver também