型別支援
更新:2007 年 11 月
下表描述從 Managed 內容封送處理 (Marshaling) 型別至 Unmanaged 內容的型別分類和結果。
型別分類
下表提供下列各節中討論的數個型別之描述和說明。
型別 |
說明 |
---|---|
實值型別 |
實值型別直接包含描述的資料,而實值型別的記憶體是從堆疊配置。 |
內建實值型別 |
Int32、UInt32、Boolean、Single 及其他等等。如需完整清單,請參閱 .NET Framework 類別庫概觀。 |
使用者定義實值型別 |
衍生自 System.ValueType。在 C# 中,會使用 struct 關鍵字來定義使用者定義的實值型別。 |
列舉型別 |
列舉型別也都是實值型別。在 .NET Framework 中列舉型別的基礎型別為 Int32。然而,您可以明確地定義列舉型別具有另一個基礎型別。支援的基礎型別,包括 Char 以外的任何整數類基底型別 (Base Type)。 |
參考型別 |
參考型別會儲存在堆積 (Heap) 中配置的物件記憶體參考。這些型別可能是內建類別、使用者定義類別、陣列、Boxed 實值型別、委派等等。 |
從 Managed 至 Unmanaged 型別
下表描述從 Managed 型別封送處理至 Unmanaged 型別的結果。
Managed 型別 |
Unmanaged 型別 |
---|---|
實值型別 (包括大於 32 位元者) |
未修改。 |
實值型別的參考 |
實值型別的指標。 |
64 位元整數 |
實值型別陣列的指標。 |
浮點數值 |
浮點數值 |
實值型別的陣列 |
實值型別陣列的指標。 |
列舉型別的基礎實值型別。 |
|
ANSI 字串 |
只有在以位元組陣列傳遞的情況下才支援。 |
Unicode (wchar_t) 字元之 Null 結尾陣列的指標。Unmanaged 程式碼不應該修改陣列。 |
|
參考型別 |
物件的基礎資料欄位指標。參考型別永遠是以循序方式進行封送處理。您只能封送處理含有實值型別成員的物件。 |
參考型別的參考 |
不支援。 |
參考型別的陣列 |
不支援。 |
委派 |
函數指標 |
Unicode (wchart_t) 字元之 Null 結尾陣列的指標。Unmanaged 程式碼可以修改陣列。 |
C# 和 Visual Basic 封送處理結果
下表列出封送處理器針對 Managed 型別,並以 Windows CE 做為作業系統裝載 Unmanaged 程式碼,所使用的 C# 和 Visual Basic 型別。這份清單並不是完整的清單。
Managed 程式碼 C# 型別 |
Managed 程式碼 Visual Basic 型別 |
Unmanaged 程式碼 ByVal |
Unmanaged 程式碼 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 * |
不支援 |
WCHAR * |
不支援 |
||
DATE |
DATE * |
||
int[] |
Integer() |
INT32 *, INT32[] |
不支援 |
Variant 型別支援
下表列出 IDispatch 封送處理器對於從 Managed 程式碼封送處理至 Unmanaged 程式碼,所支援之 VARENUM 列舉型別的型別。在所有情況下,對於參數和傳回型別都支援這些型別。不支援的型別包括不適用於 Variant 型別者。
支援的型別 |
不支援的型別 |
---|---|
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 (使用 VT_ARRAY) VT_PTR VT_HRESULT VT_VOID VT_CARRAY VT_LPSTR (使用 VT_BSTR) VT_LPWSTR (使用 VT_BSTR) VT_FILETIME VT_BLOB VT_STREAM VT_STORAGE VT_STREAMED_OBJECT VT_STORED_OBJECT VT_BLOB_OBJECT VT_VECTOR |