使用平台叫用封送處理資料
若要呼叫從 Unmanaged 程式庫匯出的函式,.NET Framework 應用程式需要表示 Unmanaged 函式之 Managed 程式碼中的函式原型 (Prototype)。若要建立原型,使平台叫用 (Invoke) 正確地封送處理資料,您必須執行以下動作:
將 DLLImportAttribute 屬性套用至 Managed 程式碼中的靜態 (Static) 函式或方法。
以 Managed 資料型別代替 Unmanaged 資料型別。
藉由套用具有選擇性欄位的屬性以及以 Managed 資料型別替代 Unmanaged 型別,即可使用 Unmanaged 函式所隨附的文件來建構相等的 Managed 原型。如需有關如何套用 DllImportAttribute 的指示,請參閱使用 Unmanaged DLL 函式。
本章節提供一些範例,示範如何建立 Managed 函式原型來將引數傳遞至 Unmanaged 程式庫匯出的函式,以及從 Unmanaged 程式庫匯出的函式中接收傳回值。這些範例還示範何時使用 MarshalAsAttribute 屬性和 Marshal 類別來明確封送處理資料。
在本節中
- 平台叫用資料型別
提供 Managed 資料型別的清單和其對應的 Unmanaged 資料型別。
- PinvokeLib.dll
提供可定義 Pinvoke.dll 提供的程式庫函式之程式碼。
- 封送處理字串
描述如何以傳值 (By Value)、傳址 (By Reference)、結構、類別和陣列方式傳遞字串。
- 封送處理類別、結構和等位
描述如何以傳值方式傳遞類別、如何傳遞多種結構,以及如何以數值和混合型別傳遞等位。
- 封送處理型別的陣列
描述如何以傳值方式傳遞整數的多維陣列,以及如何以傳址方式傳遞一維陣列。
- 其他封送處理範例
描述有關影響 Interop 封送處理行為的記憶體回收和執行緒。
相關章節
- Interop 封送處理
描述 COM Interop 和平台叫用的封送處理 (Marshaling)。
- 預設的封送處理行為
描述 Interop 封送處理用來封送處理資料的規則。
- 使用 Unmanaged DLL 函式
描述如何使用平台叫用呼叫 Unmanaged DLL 函式。