UnmanagedType Enumerazione

Definizione

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à
UnmanagedType
Attributi

Campi

Nome Valore Descrizione
Bool 2

Valore booleano a 4 byte (true != 0, false = 0). Questo è il tipo BOOL Win32.

I1 3

Intero con segno a 1 byte. È possibile usare questo membro per trasformare un valore booleano in un valore bool di tipo C a 1 byte ( =true 1, false = 0).

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

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 LPWStr valore con una stringa non gestita, a meno che la stringa non sia stata creata usando la funzione non gestita CoTaskMemAlloc .

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 LPTStr non è supportata.

ByValTStr 23

Utilizzato per matrici di caratteri a lunghezza fissa in linea che vengono visualizzate all'interno di una struttura. ByValTStr i tipi si comportano come stringhe di tipo C, a dimensione fissa all'interno di una struttura , ad esempio char s[5]. Il tipo di carattere utilizzato con ByValTStr è determinato dall'argomento CharSet dell'attributo StructLayoutAttribute applicato alla struttura contenitore. Usare sempre il SizeConst campo per indicare le dimensioni della matrice.

IUnknown 25

Puntatore COM IUnknown . È possibile usare questo membro nel Object tipo di dati.

IDispatch 26

Puntatore COM IDispatch (Object in Microsoft Visual Basic 6.0).

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 SafeArray, che è una matrice autodescrittura che contiene il tipo, il rango e i limiti dei dati della matrice associati. È possibile utilizzare questo membro con il SafeArraySubType campo per eseguire l'override del tipo di elemento predefinito.

ByValArray 30

Quando la Value proprietà è impostata su ByValArray, il SizeConst campo deve essere impostato per indicare il numero di elementi nella matrice. Il ArraySubType campo può facoltativamente contenere l'oggetto UnmanagedType degli elementi della matrice quando è necessario distinguere tra i tipi di stringa. È possibile usarlo UnmanagedType solo in una matrice i cui elementi vengono visualizzati come campi in una struttura.

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 char con prefisso di lunghezza. Raramente si usa questo membro simile a BSTR.

VariantBool 37

Tipo di VARIANT_BOOL definito da OLE a 2 byte ( =true -1, false = 0).

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.

Si applica a

Vedi anche