UnmanagedType Enumeración
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- Atributos
Campos
| Nombre | Valor | Description |
|---|---|---|
| Bool | 2 | Valor booleano de 4 bytes ( |
| I1 | 3 | Entero con signo de 1 byte. Puede usar este miembro para transformar un valor booleano en un estilo |
| 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 . |
| 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 |
| 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 |
| ByValTStr | 23 | Se usa para matrices de caracteres de longitud fija en línea que aparecen dentro de una estructura.
|
| IUnknown | 25 | Puntero COM |
| IDispatch | 26 | Puntero COM |
| 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 | , |
| ByValArray | 30 | Cuando la Value propiedad se establece |
| 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 |
| VariantBool | 37 | Tipo de VARIANT_BOOL definido por OLE de 2 bytes ( |
| 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)