使用 Unmanaged DLL 函式
平台叫用服務,可讓受控碼呼叫實作在動態連結程式庫 (DLL) 中的非受控函式,如 Windows API 中的函式。 它會找出並叫用匯出的函式,並且在需要的時候於交互操作界限之間封送處理其引數 (整數、 字串、 陣列、 結構和其他) 。
本節將介紹與取用非受控 DLL 函式相關聯的工作,並提供關於平台叫用的詳細資訊。 除了下列工作之外,還有一般考量以及提供其他資訊和範例的連結。
使用匯出的 DLL 函式
-
至少,您必須指定函式的名稱以及包含該函式之 DLL 的名稱。
-
您可以使用現有的類別、為每個 Unmanaged 函式建立個別的類別、或建立一個類別,其中包含一組相關的 Unmanaged 函式。
-
[Visual Basic] 搭配使用宣告陳述式與函式和 Lib 關鍵字。 在某些罕見的情況下,您可以搭配使用 DllImportAttribute 與共用函式關鍵字。 關於這種情況本節會於稍後加以說明。
[C#] 使用 DllImportAttribute 來識別 DLL 和函式。 以靜態和外部修飾詞來標記方法。
[C#] 使用 DllImportAttribute 來識別 DLL 和函式。 以外部 "C" 來標記包裝函式方法或函式。
如需示範如何建構要與平台叫用搭配使用之 .NET 型宣告的範例,請參閱使用平台叫用封送處理資料 (部分機器翻譯)。
進一步了解平台叫用
平台叫用依賴中繼資料來找出被匯出的函式,並在執行階段封送處理其引數。 下圖顯示這項程序。
當平台叫用呼叫 Unmanaged 函式時,它會依序執行下列動作:
找出包含該函式的 DLL。
將 DLL 載入到記憶體中。
在記憶體找出語言函式的位址,並將其引數推送至堆疊,視需要封送處理資料。
注意
僅在首次呼叫函式時尋找和載入 DLL,且尋找記憶體中的函式位址。
將控制項傳輸至 Unmanaged 函式。
平台叫用會擲回由 Unmanaged 函式產生的例外狀況給 Managed 呼叫端。