Typunterstützung
Aktualisiert: November 2007
In den folgenden Tabellen werden Kategorien von Typen und die Ergebnisse beim Marshalling von Typen von verwalteten in nicht verwaltete Kontexte beschrieben.
Typkategorien
In der folgenden Tabelle finden Sie Beschreibungen und Erklärungen zu einigen der Typen, die in den folgenden Abschnitten behandelt werden.
Typ |
Beschreibung |
---|---|
Werttypen |
Werttypen enthalten direkt die beschriebenen Daten, und der Speicher für einen Werttyp wird aus dem Stapel zugeordnet. |
Integrierte Werttypen |
Int32, UInt32, Boolean, Single usw. Eine vollständige Liste finden Sie unter Übersicht über die .NET Framework-Klassenbibliothek. |
Benutzerdefinierte Werttypen |
Abgeleitet von System.ValueType In C# wird ein benutzerdefinierter Werttyp mit dem struct-Schlüsselwort definiert. |
Enumerationen |
Enumerationen sind ebenfalls Werttypen. Der zugrunde liegende Typ einer Enumeration in .NET Framework ist Int32. Sie können für eine Enumeration jedoch explizit einen anderen zugrunde liegenden Typ definieren. Als zugrunde liegende Typen werden alle ganzzahligen Basistypen unterstützt, ausgenommen Char. |
Verweistyp |
Verweistypen speichern einen Verweis auf den Speicher eines Objekts, der im Heap zugeordnet wurde. Hierbei kann es sich um integrierte Klassen, benutzerdefinierte Klassen, Arrays, geschachtelte Werttypen, Delegaten usw. handeln. |
Marshalling von verwalteten in nicht verwaltete Typen
In der folgenden Tabelle wird das Ergebnis beschrieben, das beim Marshalling von verwalteten in nicht verwaltete Typen zustande kommt.
Verwalteter Typ |
Nicht verwalteter Typ |
---|---|
Werttyp (einschließlich von Typen größer als 32 Bits) |
Unverändert. |
Verweis auf Werttyp |
Zeiger auf den Werttyp. |
Ganze Zahl mit 64 Bits |
Zeiger auf ein Array aus Werttypen. |
Gleitkommazahl |
Gleitkommazahl. |
Array aus Werttypen |
Zeiger auf ein Array aus Werttypen. |
Zugrunde liegender Werttyp der Enumeration. |
|
ANSI-Zeichenfolge |
Nur unterstützt, wenn sie als Bytearray übergeben werden. |
Zeiger auf Unicode-Zeichenarray mit NULL-Terminator (wchar_t). Nicht verwalteter Code sollte das Array nicht verändern. |
|
Verweistyp |
Zeiger auf die zugrunde liegenden Datenfelder des Objekts. Verweistypen werden stets sequenziell gemarshallt. Sie können nur Objekte marshallen, die Werttypmember enthalten. |
Verweis auf Verweistyp |
Nicht unterstützt. |
Array aus Verweistypen |
Nicht unterstützt. |
Delegat |
Funktionszeiger |
Zeiger auf Unicode-Zeichenarray mit NULL-Terminator (wchart_t). Nicht verwalteter Code kann das Array verändern. |
Marshallingergebnisse in C# und Visual Basic
In der folgenden Tabelle werden die C#- und Visual Basic-Typen aufgeführt, die vom Marshaller für verwaltete Typen verwendet werden. Dabei ist Windows CE das Betriebssystem, auf dem der nicht verwaltete Code bereitsteht. Diese Liste ist nicht vollständig.
Verwalteter Code C#-Typen |
Verwalteter Code Visual Basic-Typen |
Nicht verwalteter Code ByVal |
Nicht verwalteter Code ByRef |
---|---|---|---|
bool |
Boolean |
BYTE |
BYTE * |
int |
Integer |
INT32 |
INT32 * |
short |
Short |
SHORT |
SHORT * |
long |
Long |
LONG |
INT64 * |
char |
Char |
WCHAR |
WCHAR * |
float |
Single |
FLOAT |
FLOAT * |
double |
Double |
DOUBLE |
DOUBLE * |
string |
String |
WCHAR * |
Nicht unterstützt |
WCHAR * |
Nicht unterstützt |
||
DATE |
DATE * |
||
int[] |
Integer() |
INT32 *, INT32[] |
Nicht unterstützt |
Unterstützung des Varianttyps
In der folgenden Tabelle werden die Typen der VARENUM-Enumeration aufgeführt, die vom IDispatch-Marshaller für das Marshalling von verwaltetem in nicht verwalteten Code unterstützt werden. In allen Fällen werden die Typen sowohl für Parameter als auch für Rückgabetypen unterstützt. Zu den nicht unterstützten Typen gehören diejenigen, die nicht auf Varianttypen anwendbar sind.
Unterstützte Typen |
Nicht unterstützte Typen |
---|---|
VT_I2 VT_I4 VT_CY VT_DATE VT_BSTR VT_DISPATCH VT_ERROR VT_BOOL VT_VARIANT VT_UNKNOWN VT_DECIMAL VT_I1 VT_UI1 VT_UI2 VT_UI4 VT_INT VT_UINT VT_ARRAY VT_R8 VT_R4 VT_CF VT_CLSID |
VT_EMPTY VT_NULL VT_I8 VT_UI8 VT_USERDEFINED VT_RECORD VT_SAFEARRAY (verwenden Sie VT_ARRAY) VT_PTR VT_HRESULT VT_VOID VT_CARRAY VT_LPSTR (verwenden Sie VT_BSTR) VT_LPWSTR (verwenden Sie VT_BSTR) VT_FILETIME VT_BLOB VT_STREAM VT_STORAGE VT_STREAMED_OBJECT VT_STORED_OBJECT VT_BLOB_OBJECT VT_VECTOR |