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 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
- 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 ( |
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 |
ByValTStr | 23 | Wird für Inlinearrays mit Zeichen fester Länge verwendet, die in einer Struktur dargestellt werden.
|
Currency | 15 | Ein Währungstyp. Wird für Decimal verwendet, um den Dezimalwert als COM-Währungstyp und nicht als |
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 |
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- |
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- |
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 |
LPUTF8Str | 48 | Ein Zeiger auf eine UTF-8-Zeichenfolge. |
LPWStr | 21 | Eine aus Unicode-Zeichen bestehende, mit NULL beendete 2-Byte-Zeichenfolge. Der Wert |
R4 | 11 | Eine 4-Byte-Gleitkommazahl. |
R8 | 12 | Eine 8-Byte-Gleitkommazahl. |
SafeArray | 29 | Ein |
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 |
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 ( |
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 Zusammenarbeit mit nicht verwaltetem Code gemarst werden. Sie können diese Enumeration verwenden, um Code mithilfe einfacher Werttypen (I1, I2, I4, I8, R4, R8, U2, U4 und U8), nicht verwalteten Typen, die in .NET Framework nicht verfügbar sind, und verschiedenen anderen Typen zu marshallen.
Weitere Informationen finden Sie unter Interoperation mit nicht verwaltetem Code.