UnmanagedType Enumeration

Definition

Gibt an, wie Parameter oder Felder für nicht verwalteten Code gemarsiert 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

Name Wert Beschreibung
Bool 2

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

I1 3

Eine mit 1 Byte signierte ganze Zahl. Sie können dieses Element verwenden, um einen booleschen Wert in einen 1-Byte-, C-Stil bool (true = 1, false = 0) zu transformieren.

U1 4

Eine 1-Byte-Ganzzahl ohne Vorzeichen.

I2 5

Eine 2-Byte-Ganzzahl.

U2 6

Eine 2-Byte-Ganzzahl ohne Vorzeichen.

I4 7

Eine mit 4 Byte signierte ganze Zahl.

U4 8

Eine 4-Byte-Ganzzahl ohne Vorzeichen.

I8 9

Eine mit 8 Byte signierte ganze Zahl.

U8 10

Eine 8-Byte-Ganzzahl ohne Vorzeichen.

R4 11

Eine 4-Byte-Gleitkommazahl.

R8 12

Eine 8-Byte-Gleitkommazahl.

Currency 15

Ein Währungstyp. Wird für einen Decimal Wert verwendet, um den Dezimalwert als COM-Währungstyp statt als A Decimalzu marshallen.

BStr 19

Eine Unicode-Zeichenfolge, bei der es sich um ein durch Länge präfixiertes Doppelbyte handelt. Sie können dieses Element, das die Standardzeichenfolge in COM ist, für den String Datentyp verwenden.

LPStr 20

Eine einzelne Byte-, NULL-gekündigte ANSI-Zeichenfolge. Sie können dieses Element für die String Typen und StringBuilder Datentypen verwenden.

LPWStr 21

Eine 2-Byte-, NULL-beendete Unicode-Zeichenzeichenfolge. Sie können den LPWStr Wert nicht mit einer nicht verwalteten Zeichenfolge verwenden, es sei denn, die Zeichenfolge wurde mithilfe der nicht verwalteten CoTaskMemAlloc Funktion erstellt.

LPTStr 22

Eine Unicode-Zeichenfolge. Dieser Wert wird nur für den Plattform-Aufruf und nicht für DIE COM-Interoperabilität unterstützt, da das Exportieren einer Zeichenfolge vom Typ LPTStr nicht unterstützt wird.

ByValTStr 23

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

IUnknown 25

Com-Zeiger IUnknown . Sie können dieses Element für den Object Datentyp verwenden.

IDispatch 26

Ein COM-IDispatchZeiger (Object in Microsoft Visual Basic 6,0).

Struct 27

A VARIANT, die zum Marshallen verwalteter formatierter Klassen und Werttypen verwendet wird.

Interface 28

Ein COM-Schnittstellenzeiger. Die Guid Schnittstelle wird aus den Klassenmetadaten abgerufen. Verwenden Sie dieses Element, um den genauen Schnittstellentyp oder den Standardschnittstellentyp anzugeben, wenn Sie ihn auf eine Klasse anwenden. Dieses Element erzeugt das gleiche Verhalten wie IUnknown beim Anwenden auf den Object Datentyp.

SafeArray 29

A SafeArray, bei dem es sich um ein selbst beschreibende Array handelt, das den Typ, die Rangfolge und die Grenzen der zugeordneten Arraydaten enthält. Sie können dieses Element mit dem SafeArraySubType Feld verwenden, um den Standardelementtyp außer Kraft zu setzen.

ByValArray 30

Wenn die Value Eigenschaft auf ByValArray festgelegt ist, muss das SizeConst Feld festgelegt werden, um die Anzahl der Elemente im Array anzugeben. Das ArraySubType Feld kann optional die UnmanagedType Arrayelemente enthalten, wenn es erforderlich ist, zwischen Zeichenfolgentypen zu unterscheiden. Sie können dies UnmanagedType nur für ein Array verwenden, dessen Elemente als Felder in einer Struktur angezeigt werden.

SysInt 31

Eine plattformabhängige, signierte ganze Zahl: 4 Bytes auf 32-Bit-Windows, 8 Bytes auf 64-Bit-Windows.

SysUInt 32

Eine plattformabhängige, nicht signierte ganze Zahl: 4 Bytes auf 32-Bit-Windows, 8 Bytes auf 64-Bit-Windows.

VBByRefStr 34

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

AnsiBStr 35

Eine ANSI-Zeichenfolge, bei der es sich um ein längenpräfixiertes Einzelnes Byte handelt. Sie können dieses Element für den String Datentyp verwenden.

TBStr 36

Eine längepräfixierte Unicode-Zeichenfolge char . Sie verwenden dieses BSTR-ähnliche Mitglied selten.

VariantBool 37

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

FunctionPtr 38

Eine ganze Zahl, die als C-Stil-Funktionszeiger verwendet werden kann. Sie können dieses Element für einen Delegate Datentyp oder für einen Typ verwenden, der von einem Delegate.

AsAny 40

Ein dynamischer Typ, der den Typ eines Objekts zur Laufzeit bestimmt und das Objekt als diesen Typ marshallt. Dieses Mitglied ist nur für Methoden zum Aufrufen der Plattform gültig.

LPArray 42

Ein Zeiger auf das erste Element eines C-Formatarrays. Beim Marshalling von verwaltetem zu nicht verwaltetem Code wird die Länge des Arrays durch die Länge des verwalteten Arrays bestimmt. Beim Marshalling von nicht verwaltetem Code in verwaltetem Code wird die Länge des Arrays aus den SizeConstSizeParamIndex Feldern und Feldern bestimmt, optional gefolgt vom nicht verwalteten Typ der Elemente innerhalb des Arrays, wenn es erforderlich ist, zwischen Zeichenfolgentypen zu unterscheiden.

LPStruct 43

Ein Zeiger auf eine Struktur im C-Stil, die Sie zum Marshallen verwalteter formatierter Klassen verwenden. Dieses Mitglied ist nur für Methoden zum Aufrufen der Plattform gültig.

CustomMarshaler 44

Gibt die benutzerdefinierte Marshaler-Klasse an, wenn sie mit dem MarshalType Feld verwendet MarshalTypeRef wird. Das MarshalCookie Feld kann verwendet werden, um zusätzliche Informationen an den benutzerdefinierten Marshaler zu übergeben. Sie können dieses Element für jeden Referenztyp verwenden. Dieses Element ist nur für Parameter gültig und gibt nur Werte zurück. Sie kann nicht für Felder verwendet werden.

Error 45

Ein systemeigener Typ, der einem I4 oder einem U4 zugeordnet ist und bewirkt, dass der Parameter in der exportierten Typbibliothek als HRESULT exportiert wird.

IInspectable 46

Ein Windows-Runtime Schnittstellenzeiger. Sie können dieses Element für den Object Datentyp verwenden. Built-In-Unterstützung für WinRT wurde in .NET 5 entfernt.

HString 47

Eine Windows-Runtime Zeichenfolge. Sie können dieses Element für den String Datentyp verwenden. Built-In-Unterstützung für WinRT wurde in .NET 5 entfernt. Informationen zur Problemumgehung finden Sie unter früher integrierten unterstützten Typen .

LPUTF8Str 48

Ein Zeiger auf eine UTF-8-codierte Zeichenfolge.

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 Schnittstelle für die IMyStorage Verwendung durch COM wieder exportiert wird. (COM-Clients sollten die vorhandene COM-Komponente direkt verwenden.) In diesem Beispiel werden mehrere UnmanagedType Member angegeben, die die typen darstellen, MarshalAsAttribute die von der ursprünglichen COM-Schnittstelle verwendet werden.

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 Aufzählung mit dem System.Runtime.InteropServices.MarshalAsAttribute Attribut, um anzugeben, wie Typen während der Interoperabilität mit nicht verwalteten Code gemarstet werden. Sie können diese Enumeration verwenden, um Code mithilfe einfacher Werttypen (I1, I2, I4, I8, R4, R8, U2, U4, U4 und U8) zu marshallen, nicht verwaltete Typen, die im .NET Framework nicht verfügbar sind, und verschiedene verschiedene Typen.

Weitere Informationen finden Sie unter Interoperation mit nicht verwaltetem Code.

Gilt für:

Weitere Informationen