UnmanagedType Enumeration
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- Attribute
Felder
| Name | Wert | Beschreibung |
|---|---|---|
| Bool | 2 | Ein boolescher Wert von 4 Byte ( |
| 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 |
| 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 |
| 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 |
| 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 |
| ByValTStr | 23 | Wird für Inline-Zeichenarrays mit fester Länge verwendet, die in einer Struktur angezeigt werden.
|
| IUnknown | 25 | Com-Zeiger |
| IDispatch | 26 | Ein COM- |
| 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 |
| ByValArray | 30 | Wenn die Value Eigenschaft auf |
| 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 |
| VariantBool | 37 | Ein 2-Byte-, OLE-definierter VARIANT_BOOL Typ ( |
| 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.