Freigeben über


UnmanagedType-Enumeration

 

Veröffentlicht: Oktober 2016

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

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

Syntax

[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum UnmanagedType
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class UnmanagedType
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type UnmanagedType
<SerializableAttribute>
<ComVisibleAttribute(True)>
Public Enumeration UnmanagedType

Member

Membername Beschreibung
AnsiBStr

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

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

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

BStr

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

Wenn die MarshalAsAttribute.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

Wird für Inlinearrays mit Zeichen fester Länge verwendet, die in einer Struktur dargestellt werden. Der in ByValTStr verwendete Zeichentyp wird durch das System.Runtime.InteropServices.CharSet-Argument des System.Runtime.InteropServices.StructLayoutAttribute-Attributs bestimmt, das auf die enthaltende Struktur angewendet wird. Verwenden Sie immer das Feld MarshalAsAttribute.SizeConst, um die Größe des Arrays anzugeben.

Currency

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

CustomMarshaler

Gibt bei Verwendung mit den Feldern MarshalAsAttribute.MarshalType oder MarshalAsAttribute.MarshalTypeRef die benutzerdefinierte Marshallerklasse an. Das Feld MarshalAsAttribute.MarshalCookie kann zum Übergeben zusätzlicher Informationen an den benutzerdefinierten Marshaller verwendet werden. Sie können diesen Member für beliebige Verweistypen verwenden.

Error

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

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

Eine Windows-Runtime-Zeichenfolge. Sie können diesen Member für den Datentyp System.String verwenden.

I1

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

Eine 2-Byte-Ganzzahl mit Vorzeichen.

I4

Eine 4-Byte-Ganzzahl mit Vorzeichen.

I8

Eine 8-Byte-Ganzzahl mit Vorzeichen.

IDispatch

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

IInspectable

Ein Windows-Runtime-Schnittstellenzeiger. Sie können diesen Member für den Datentyp Object verwenden.

Interface

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 UnmanagedType.IUnknown, wenn Sie ihn auf den Datentyp Object anwenden.

IUnknown

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

LPArray

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 MarshalAsAttribute.SizeConst und vom Feld MarshalAsAttribute.SizeParamIndex bestimmt, auf die optional der nicht verwaltete Typ der Elemente im Array folgt, wenn eine Unterscheidung zwischen Zeichenfolgentypen erforderlich ist.

LPStr

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

LPStruct

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

LPTStr

Eine plattformabhängige Zeichenfolge, d.&nbsp;h. ANSI unter Windows&nbsp;98 und Unicode unter Windows&nbsp;NT und Windows&nbsp;XP. 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

Ein Zeiger auf eine UTF-8-Zeichenfolge.

LPWStr

Eine aus Unicode-Zeichen bestehende, mit NULL beendete 2-Byte-Zeichenfolge.

R4

Eine 4-Byte-Gleitkommazahl.

R8

Eine 8-Byte-Gleitkommazahl.

SafeArray

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 MarshalAsAttribute.SafeArraySubType verwenden, um den Standardelementtyp zu überschreiben.

Struct

Ein VARIANT zum Marshallen verwalteter formatierter Klassen und Werttypen.

SysInt

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

SysUInt

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

TBStr

Eine plattformabhängige char-Zeichenfolge mit Längenpräfix: ANSI unter Windows 98, Unicode unter Windows NT. Dieser BSTR-ähnliche Member wird nur selten verwendet.

U1

Eine 1-Byte-Ganzzahl ohne Vorzeichen.

U2

Eine 2-Byte-Ganzzahl ohne Vorzeichen.

U4

Eine 4-Byte-Ganzzahl ohne Vorzeichen.

U8

Eine 8-Byte-Ganzzahl ohne Vorzeichen.

VariantBool

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

VBByRefStr

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.

Hinweise

Verwenden der UnmanagedType Enumeration mit den System.Runtime.InteropServices.MarshalAsAttribute Attribut, um anzugeben, wie Typen während der Interoperation mit nicht verwaltetem Code gemarshallt werden. Sie können diese Enumeration zum Marshallen von Code mithilfe von einfachen Typen (I1, I2, I4, I8, R4, R8, U2, U4 und U8), nicht verwaltete Werttypen, die in .NET Framework nicht verfügbar sind und verschiedene Typen verwenden.

Weitere Informationen finden Sie unter Interoperating with Unmanaged Code.

Beispiele

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

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
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
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();
   }
};

Versionsinformationen

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Siehe auch

MarshalAsAttribute
ComImportAttribute
System.Runtime.InteropServices-Namespace

Zurück zum Anfang