UnmanagedType Enumerazione
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Identifica come effettuare il marshalling di parametri o campi nel codice non gestito.
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
- Ereditarietà
- Attributi
Campi
| Nome | Valore | Descrizione |
|---|---|---|
| Bool | 2 | Valore booleano a 4 byte ( |
| I1 | 3 | Intero con segno a 1 byte. È possibile usare questo membro per trasformare un valore booleano in un valore |
| U1 | 4 | Intero senza segno a 1 byte. |
| I2 | 5 | Intero con segno a 2 byte. |
| U2 | 6 | Intero senza segno a 2 byte. |
| I4 | 7 | Intero con segno a 4 byte. |
| U4 | 8 | Intero senza segno a 4 byte. |
| I8 | 9 | Intero con segno a 8 byte. |
| U8 | 10 | Intero senza segno a 8 byte. |
| R4 | 11 | Numero a virgola mobile a 4 byte. |
| R8 | 12 | Numero a virgola mobile a 8 byte. |
| Currency | 15 | Tipo di valuta. Utilizzato per effettuare Decimal il marshalling del valore decimale come tipo di valuta COM anziché come . |
| BStr | 19 | Stringa di caratteri Unicode con un byte doppio preceduto da lunghezza. È possibile usare questo membro, ovvero la stringa predefinita in COM, nel String tipo di dati. |
| LPStr | 20 | Stringa di caratteri ANSI con terminazione Null a byte singolo. È possibile usare questo membro nei String tipi di dati e StringBuilder . |
| LPWStr | 21 | Stringa di caratteri Unicode con terminazione Null a 2 byte. Non è possibile usare il |
| LPTStr | 22 | Stringa di caratteri Unicode. Questo valore è supportato solo per platform invoke e non per l'interoperabilità COM, perché l'esportazione di una stringa di tipo |
| ByValTStr | 23 | Utilizzato per matrici di caratteri a lunghezza fissa in linea che vengono visualizzate all'interno di una struttura.
|
| IUnknown | 25 | Puntatore COM |
| IDispatch | 26 | Puntatore COM |
| Struct | 27 | Variant, che viene usato per effettuare il marshalling di classi formattate gestite e tipi di valore. |
| Interface | 28 | Puntatore all'interfaccia COM. L'oggetto Guid dell'interfaccia viene ottenuto dai metadati della classe. Utilizzare questo membro per specificare il tipo di interfaccia esatto o il tipo di interfaccia predefinito se lo si applica a una classe. Questo membro produce lo stesso comportamento di IUnknown quando lo si applica al Object tipo di dati. |
| SafeArray | 29 | Oggetto |
| ByValArray | 30 | Quando la Value proprietà è impostata su |
| SysInt | 31 | Intero con segno dipendente dalla piattaforma: 4 byte su Windows a 32 bit, 8 byte in Windows a 64 bit. |
| SysUInt | 32 | Intero senza segno dipendente dalla piattaforma: 4 byte su Windows a 32 bit, 8 byte in Windows a 64 bit. |
| VBByRefStr | 34 | Valore che consente a Visual Basic di modificare una stringa nel codice non gestito e di riflettere i risultati nel codice gestito. Questo valore è supportato solo per platform invoke. |
| AnsiBStr | 35 | Stringa di caratteri ANSI con un byte singolo preceduto da lunghezza. È possibile usare questo membro nel String tipo di dati. |
| TBStr | 36 | Stringa Unicode |
| VariantBool | 37 | Tipo di VARIANT_BOOL definito da OLE a 2 byte ( = |
| FunctionPtr | 38 | Intero che può essere utilizzato come puntatore a funzione in stile C. È possibile usare questo membro in un Delegate tipo di dati o in un tipo che eredita da un oggetto Delegate. |
| AsAny | 40 | Tipo dinamico che determina il tipo di un oggetto in fase di esecuzione e effettua il marshalling dell'oggetto come tale tipo. Questo membro è valido solo per i metodi platform invoke. |
| LPArray | 42 | Puntatore al primo elemento di una matrice in stile C. Quando si esegue il marshalling da codice gestito a codice non gestito, la lunghezza della matrice è determinata dalla lunghezza della matrice gestita. Quando si esegue il marshalling da codice non gestito a codice gestito, la lunghezza della matrice viene determinata dai SizeConst campi e SizeParamIndex , facoltativamente, seguita dal tipo non gestito degli elementi all'interno della matrice quando è necessario distinguere tra i tipi di stringa. |
| LPStruct | 43 | Puntatore a una struttura in stile C usata per effettuare il marshalling di classi formattate gestite. Questo membro è valido solo per i metodi platform invoke. |
| CustomMarshaler | 44 | Specifica la classe del gestore di marshalling personalizzata quando viene usata con il MarshalType campo o MarshalTypeRef . Il MarshalCookie campo può essere usato per passare informazioni aggiuntive al gestore di marshalling personalizzato. È possibile usare questo membro in qualsiasi tipo di riferimento. Questo membro è valido solo per i parametri e i valori restituiti. Non può essere utilizzata nei campi. |
| Error | 45 | Tipo nativo associato a un I4 oggetto o U4 e che determina l'esportazione del parametro come HRESULT nella libreria dei tipi esportata. |
| IInspectable | 46 | Puntatore a interfaccia Windows Runtime. È possibile usare questo membro nel Object tipo di dati. il supporto Built-in per WinRT è stato rimosso in .NET 5. |
| HString | 47 | Stringa Windows Runtime. È possibile usare questo membro nel String tipo di dati. il supporto Built-in per WinRT è stato rimosso in .NET 5. Per una soluzione alternativa, vedere Tipi supportati in precedenza . |
| LPUTF8Str | 48 | Puntatore a una stringa con codifica UTF-8. |
Esempio
Il frammento di codice seguente illustra come dichiarare, nel codice sorgente gestito, un'interfaccia non gestita implementata da un componente COM. L'attributo System.Runtime.InteropServices.ComImportAttribute impedisce l'esportazione dell'interfaccia IMyStorage per l'uso da parte di COM. I client COM devono usare direttamente il componente COM esistente. In questo esempio vengono MarshalAsAttribute specificati diversi UnmanagedType membri, che rappresentano i tipi utilizzati dall'interfaccia COM originale.
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
Commenti
Usare l'enumerazione con l'attributo UnmanagedTypeSystem.Runtime.InteropServices.MarshalAsAttribute per specificare la modalità di marshalling dei tipi durante l'interoperabilità con codice non gestito. È possibile usare questa enumerazione per effettuare il marshalling del codice usando tipi valore semplici (I1, I2, I4, I8, R4, R8, U2, U4 e U8), tipi non gestiti non disponibili nel framework di .NET e vari tipi vari.
Per altre informazioni, vedere Interoperabilità con codice non gestito.