UnmanagedType Enumeration

Definition

Gibt an, wie Parameter oder Felder in nicht verwaltetem Code gemarshallt werden.

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
Vererbung
UnmanagedType
Attribute

Felder

AnsiBStr 35

Eine Zeichenfolge aus ANSI-Zeichen, die ein Einzelbyte mit Längenpräfix ist. Sie können diesen Member für den Datentyp String verwenden.

AsAny 40

Ein dynamischer Typ, der zur Laufzeit den Typ eines Objekts bestimmt und das Objekt als diesen Typ marshallt. Dieser Member ist nur für Plattformaufrufmethoden gültig.

Bool 2

Ein boolescher Wert mit 4 Byte (true != 0, false = 0). Dies ist der Win32-BOOL-Typ.

BStr 19

Eine Zeichenfolge aus Unicode-Zeichen, die ein Doppelbyte mit Längenpräfix ist. Sie können diesen Member, der die Standardzeichenfolge in COM darstellt, für den Datentyp String verwenden.

ByValArray 30

Wenn die Value-Eigenschaft auf ByValArray festgelegt wird, muss das Feld SizeConst so festgelegt werden, dass die Anzahl der Elemente im Array angegeben wird. Das Feld ArraySubType kann optional den UnmanagedType der Arrayelemente enthalten, wenn zwischen verschiedenen Zeichenfolgetypen unterschieden werden muss. Sie können diesen UnmanagedType nur für ein Array verwenden, dessen Elemente in einer Struktur in Form von Feldern angezeigt werden.

ByValTStr 23

Wird für Inlinearrays mit Zeichen fester Länge verwendet, die in einer Struktur dargestellt werden. ByValTStr -Typen verhalten sich wie Zeichenfolgen mit fester Größe in C-Format innerhalb einer Struktur (z. B char s[5]. ). Der in ByValTStr verwendete Zeichentyp wird durch das CharSet-Argument des StructLayoutAttribute-Attributs bestimmt, das auf die enthaltende Struktur angewendet wird. Verwenden Sie immer das Feld SizeConst, um die Größe des Arrays anzugeben.

Currency 15

Ein Währungstyp. Wird für Decimal verwendet, um den Dezimalwert als COM-Währungstyp und nicht als Decimal zu marshallen.

CustomMarshaler 44

Gibt bei Verwendung mit den Feldern MarshalType oder MarshalTypeRef die benutzerdefinierte Marshallerklasse an. Das Feld MarshalCookie kann zum Übergeben zusätzlicher Informationen an den benutzerdefinierten Marshaller verwendet werden. Sie können diesen Member für beliebige Verweistypen verwenden. Dieser Member ist nur für Parameter und Rückgabewerte gültig. Er kann nicht für Felder verwendet werden.

Error 45

Ein nativer Typ, der mit einem I4 oder einem U4 verknüpft ist und bewirkt, dass der Parameter als ein HRESULT in die Bibliothek mit den Exporttypen exportiert wird.

FunctionPtr 38

Eine Ganzzahl, die als C-Funktionszeiger verwendet werden kann. Sie können diesen Member für einen Delegate-Datentyp oder einen Typ verwenden, der von einem Delegate erbt.

HString 47

Eine Windows-Runtime Zeichenfolge. Sie können diesen Member für den Datentyp String verwenden. Die integrierte Unterstützung für WinRT wurde in .NET 5 entfernt. Eine Problemumgehung finden Sie unter Ehemals integrierte unterstützte Typen .

I1 3

Eine 1-Byte-Ganzzahl mit Vorzeichen. Sie können mit diesem Member einen booleschen Wert in einen 1-Byte-Wert im C-Format bool (true = 1, false = 0) transformieren.

I2 5

Eine 2-Byte-Ganzzahl mit Vorzeichen.

I4 7

Eine 4-Byte-Ganzzahl mit Vorzeichen.

I8 9

Eine 8-Byte-Ganzzahl mit Vorzeichen.

IDispatch 26

Ein COM-IDispatch-Zeiger (Object in Microsoft Visual Basic 6.0).

IInspectable 46

Ein Windows-Runtime-Schnittstellenzeiger. Sie können diesen Member für den Datentyp Object verwenden. Die integrierte Unterstützung für WinRT wurde in .NET 5 entfernt.

Interface 28

Ein COM-Schnittstellenzeiger. Die Guid der Schnittstelle wird aus den Metadaten der Klasse ermittelt. Mit diesem Member geben Sie den genauen Schnittstellentyp oder den Standardschnittstellentyp an, wenn Sie ihn auf eine Klasse anwenden. Dieser Member bewirkt das gleiche Verhalten wie IUnknown, wenn Sie ihn auf den Datentyp Object anwenden.

IUnknown 25

Ein COM-IUnknown-Zeiger. Sie können diesen Member für den Datentyp Object verwenden.

LPArray 42

Ein Zeiger auf das erste Element eines C-Arrays. Beim Marshallen von verwaltetem zu nicht verwalteten Code wird die Länge des Arrays anhand der Länge des verwalteten Arrays bestimmt. Beim Marshallen von nicht verwaltetem in verwalteten Code wird die Länge des Arrays vom Feld SizeConst und vom Feld SizeParamIndex bestimmt, auf die optional der nicht verwaltete Typ der Elemente im Array folgt, wenn eine Unterscheidung zwischen Zeichenfolgentypen erforderlich ist.

LPStr 20

Eine aus ANSI-Zeichen bestehende, mit NULL beendete Einzelbyte-Zeichenfolge. Sie können diesen Member für die Datentypen String und StringBuilder verwenden.

LPStruct 43

Ein Zeiger auf eine C-Struktur, mit dem verwaltete formatierte Klassen gemarshallt werden. Dieser Member ist nur für Plattformaufrufmethoden gültig.

LPTStr 22

Eine Unicode-Zeichenfolge. Dieser Wert wird nur für Plattformaufrufe und nicht für COM-Interop unterstützt, da das Exportieren einer Zeichenfolge vom Typ LPTStr nicht unterstützt wird.

LPUTF8Str 48

Ein Zeiger auf eine UTF-8-Zeichenfolge.

LPWStr 21

Eine aus Unicode-Zeichen bestehende, mit NULL beendete 2-Byte-Zeichenfolge. Der Wert LPWStr kann nicht mit einer nicht verwalteten Zeichenfolge verwendet werden, es sei denn, die Zeichenfolge wurde mit der nicht verwalteten CoTaskMemAlloc-Funktion erstellt.

R4 11

Eine 4-Byte-Gleitkommazahl.

R8 12

Eine 8-Byte-Gleitkommazahl.

SafeArray 29

Ein SafeArray ist ein selbstbeschreibendes Array mit dem Typ, dem Rang und den Grenzen der verknüpften Arraydaten. Sie können diesen Member mit dem Feld SafeArraySubType verwenden, um den Standardelementtyp zu überschreiben.

Struct 27

Ein VARIANT zum Marshallen verwalteter formatierter Klassen und Werttypen.

SysInt 31

Eine plattformabhängige Ganzzahl mit Vorzeichen.: 4 Byte für 32-Bit-Windows, 8 Bytes auf 64-Bit-Windows.

SysUInt 32

Eine plattformabhängige Ganzzahl ohne Vorzeichen.: 4 Byte für 32-Bit-Windows, 8 Bytes auf 64-Bit-Windows.

TBStr 36

Eine Unicode-Zeichenfolge char mit Längenpräfix. Dieser BSTR-ähnliche Member wird nur selten verwendet.

U1 4

Eine 1-Byte-Ganzzahl ohne Vorzeichen.

U2 6

Eine 2-Byte-Ganzzahl ohne Vorzeichen.

U4 8

Eine 4-Byte-Ganzzahl ohne Vorzeichen.

U8 10

Eine 8-Byte-Ganzzahl ohne Vorzeichen.

VariantBool 37

Ein durch OLE definierter VARIANT_BOOL-Typ mit 2 Byte (true = -1, false = 0).

VBByRefStr 34

Ein Wert, der es Visual Basic ermöglicht, eine Zeichenfolge in nicht verwaltetem Code zu ändern und die Ergebnisse in verwaltetem Code wiederzugeben. Dieser Wert wird nur für Plattformaufrufe unterstützt.

Beispiele

Das folgende Codefragment veranschaulicht, wie sie in verwaltetem Quellcode eine nicht verwaltete Schnittstelle deklarieren, die von einer COM-Komponente implementiert wird. Das System.Runtime.InteropServices.ComImportAttribute Attribut verhindert, dass die IMyStorage Schnittstelle zur Verwendung durch COM zurück exportiert wird. (COM-Clients sollten die vorhandene COM-Komponente direkt verwenden.) Gibt in diesem Beispiel MarshalAsAttribute mehrere UnmanagedType Member an, die die von der ursprünglichen COM-Schnittstelle verwendeten Typen darstellen.

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

Hinweise

Verwenden Sie die UnmanagedType -Enumeration mit dem System.Runtime.InteropServices.MarshalAsAttribute -Attribut, um anzugeben, wie Typen während der Interoperation mit nicht verwaltetem Code gemarshallt werden. Sie können diese Enumeration verwenden, um Code mithilfe einfacher Werttypen (I1, I2, I4, I8, R4, R8, U2, U4 und U8), nicht verwalteter Typen, die im .NET Framework nicht verfügbar sind, und verschiedenen verschiedenen Typen zu marshallen.

Weitere Informationen finden Sie unter Interoperation mit nicht verwaltetem Code.

Gilt für:

Weitere Informationen