平台調用是一項服務,可讓受控代碼呼叫在動態連結庫(DLL)中實作的非受控函式,例如 Windows API 中的函式。 它會定位並調用已導出的函式,並在需要時將其參數(如整數、字串、陣列、結構等)跨越互操作邊界進行封送處理。
本節介紹與使用非受控 DLL 函式相關聯的工作,並提供有關平台調用的詳細資訊。 除了下列任務之外,還有一些整體考量,以及提供更多資訊和範例的連結。
若要取用導出的 DLL 函式
-
您至少必須指定函式的名稱,以及包含它的 DLL 名稱。
-
您可以使用現有的類別、為每個 Unmanaged 函式建立個別類別,或建立一個包含一組相關 Unmanaged 函式的類別。
-
[Visual Basic] 使用 Declare 語句,搭配 Function 和 Lib 關鍵詞。 在某些情況下,您可以使用 DllImportAttribute 搭配 Shared Function 關鍵詞。 本節稍後會說明這些案例。
[C#]使用 DllImportAttribute 來識別 DLL 和函式。 使用 靜態 和 外部 修飾詞標記該方法。
[C++]使用 DllImportAttribute 來識別 DLL 和函式。 使用 extern “C” 標記包裝函式方法或函式。
如需示範如何建構基於.NET的宣告以搭配平台調用使用的範例,請參閱 使用平台調用封送數據。
進一步瞭解平台調用
平台調用依賴元數據來定位導出的函式,並在執行階段封送其參數。 下圖顯示這項程序。
當平台調用呼叫 Unmanaged 函式時,它會執行下列動作序列:
找出包含函式的 DLL。
將 DLL 載入記憶體。
在記憶體中找到函式的位址,將其參數推送至堆疊,並根據需要處理數據。
備註
尋找和載入 DLL,並在記憶體中尋找函式的位址只會發生在函式的第一次呼叫上。
將控制權傳輸至非受控函式。
平台調用會將非受控函式所產生的例外擲回給受控呼叫端。