UnmanagedType Enumeración

Definición

Identifica cómo serializar parámetros o campos en código no administrado.

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

Campos

Nombre Valor Description
Bool 2

Valor booleano de 4 bytes (true != 0, false = 0). Este es el tipo BOOL win32.

I1 3

Entero con signo de 1 byte. Puede usar este miembro para transformar un valor booleano en un estilo bool C de 1 byte (true = 1, false = 0).

U1 4

Entero de 1 byte sin signo.

I2 5

Entero con signo de 2 bytes.

U2 6

Entero de 2 bytes sin signo.

I4 7

Entero con signo de 4 bytes.

U4 8

Entero de 4 bytes sin signo.

I8 9

Entero con signo de 8 bytes.

U8 10

Entero de 8 bytes sin signo.

R4 11

Número de punto flotante de 4 bytes.

R8 12

Número de punto flotante de 8 bytes.

Currency 15

Tipo de moneda. Se usa en Decimal para serializar el valor decimal como un tipo de moneda COM en lugar de como .Decimal

BStr 19

Cadena de caracteres Unicode que es un byte doble con prefijo de longitud. Puede usar este miembro, que es la cadena predeterminada en COM, en el String tipo de datos.

LPStr 20

Cadena de caracteres ANSI terminada en NULL de un solo byte. Puede usar este miembro en los String tipos de datos y StringBuilder .

LPWStr 21

Cadena de caracteres Unicode terminada en UNICODE de 2 bytes. No se puede usar el LPWStr valor con una cadena no administrada a menos que la cadena se haya creado mediante la función no administrada CoTaskMemAlloc .

LPTStr 22

Cadena de caracteres Unicode. Este valor solo se admite para la invocación de plataforma y no para la interoperabilidad COM, ya que no se admite la exportación de una cadena de tipo LPTStr .

ByValTStr 23

Se usa para matrices de caracteres de longitud fija en línea que aparecen dentro de una estructura. ByValTStr los tipos se comportan como cadenas de estilo C, de tamaño fijo dentro de una estructura (por ejemplo, char s[5]). El tipo de carácter usado con ByValTStr viene determinado por el CharSet argumento del StructLayoutAttribute atributo aplicado a la estructura contenedora. Use siempre el SizeConst campo para indicar el tamaño de la matriz.

IUnknown 25

Puntero COM IUnknown . Puede usar este miembro en el tipo de Object datos.

IDispatch 26

Puntero COM IDispatch (Object en Microsoft Visual Basic 6.0).

Struct 27

Variant, que se usa para serializar clases con formato administrado y tipos de valor.

Interface 28

Puntero de interfaz COM. De Guid la interfaz se obtiene de los metadatos de clase. Use este miembro para especificar el tipo de interfaz exacto o el tipo de interfaz predeterminado si se aplica a una clase. Este miembro produce el mismo comportamiento que IUnknown cuando se aplica al tipo de Object datos.

SafeArray 29

, SafeArrayque es una matriz autodescriptante que contiene el tipo, la clasificación y los límites de los datos de matriz asociados. Puede usar este miembro con el SafeArraySubType campo para invalidar el tipo de elemento predeterminado.

ByValArray 30

Cuando la Value propiedad se establece ByValArrayen , el SizeConst campo debe establecerse para indicar el número de elementos de la matriz. El ArraySubType campo puede contener opcionalmente el UnmanagedType de los elementos de matriz cuando es necesario diferenciar entre los tipos de cadena. Solo se puede usar UnmanagedType en una matriz cuyos elementos aparecen como campos en una estructura.

SysInt 31

Entero con signo dependiente de la plataforma: 4 bytes en Windows de 32 bits, 8 bytes en Windows de 64 bits.

SysUInt 32

Entero sin signo dependiente de la plataforma: 4 bytes en Windows de 32 bits, 8 bytes en Windows de 64 bits.

VBByRefStr 34

Valor que permite a Visual Basic cambiar una cadena en código no administrado y tener los resultados reflejados en código administrado. Este valor solo se admite para la invocación de plataforma.

AnsiBStr 35

Cadena de caracteres ANSI que es un byte único con prefijo de longitud. Puede usar este miembro en el tipo de String datos.

TBStr 36

Cadena Unicode char con prefijo de longitud. Rara vez se usa este miembro similar a BSTR.

VariantBool 37

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

FunctionPtr 38

Entero que se puede usar como puntero de función de estilo C. Puede usar este miembro en un Delegate tipo de datos o en un tipo que herede de .Delegate

AsAny 40

Tipo dinámico que determina el tipo de un objeto en tiempo de ejecución y serializa el objeto como ese tipo. Este miembro solo es válido para los métodos de invocación de plataforma.

LPArray 42

Puntero al primer elemento de una matriz de estilo C. Al serializar de código administrado a no administrado, la longitud de la matriz viene determinada por la longitud de la matriz administrada. Al serializar de unmanaged a código administrado, la longitud de la matriz se determina a partir de los SizeConst campos y SizeParamIndex , opcionalmente, seguido del tipo no administrado de los elementos de la matriz cuando es necesario diferenciar entre los tipos de cadena.

LPStruct 43

Puntero a una estructura de estilo C que se usa para serializar clases con formato administrado. Este miembro solo es válido para los métodos de invocación de plataforma.

CustomMarshaler 44

Especifica la clase del serializador personalizado cuando se usa con el MarshalType campo o MarshalTypeRef . El MarshalCookie campo se puede usar para pasar información adicional al serializador personalizado. Puede usar este miembro en cualquier tipo de referencia. Este miembro solo es válido para parámetros y valores devueltos. No se puede usar en campos.

Error 45

Tipo nativo asociado a o I4U4 y que hace que el parámetro se exporte como HRESULT en la biblioteca de tipos exportada.

IInspectable 46

Puntero de interfaz Windows Runtime. Puede usar este miembro en el tipo de Object datos. La compatibilidad integrada con WinRT se quitó en .NET 5.

HString 47

Cadena de Windows Runtime. Puede usar este miembro en el tipo de String datos. La compatibilidad integrada con WinRT se quitó en .NET 5. Consulte Tipos admitidos anteriormente integrados para obtener una solución alternativa.

LPUTF8Str 48

Puntero a una cadena codificada UTF-8.

Ejemplos

En el fragmento de código siguiente se muestra cómo declarar, en código fuente administrado, una interfaz no administrada implementada por un componente COM. El System.Runtime.InteropServices.ComImportAttribute atributo impide que la IMyStorage interfaz se exporte de nuevo para su uso por COM. (Los clientes COM deben usar directamente el componente COM existente). En este ejemplo, MarshalAsAttribute especifica varios UnmanagedType miembros, que representan los tipos usados por la interfaz 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

Comentarios

Use la UnmanagedType enumeración con el System.Runtime.InteropServices.MarshalAsAttribute atributo para especificar cómo se serializa el tipo durante la interoperación con código no administrado. Puede usar esta enumeración para serializar el código mediante tipos de valor simples (I1, I2, I4, I8, R4, R8, U2, U4 y U8), tipos no administrados que no están disponibles en .NET Framework y varios tipos varios.

Para más información, consulte Interoperating with Unmanaged Code (Interoperar con código no administrado)

Se aplica a

Consulte también