使用 Unmanaged DLL 函式

平台叫用服務,可讓受控碼呼叫實作在動態連結程式庫 (DLL) 中的非受控函式,如 Windows API 中的函式。 它會找出並叫用匯出的函式,並且在需要的時候於交互操作界限之間封送處理其引數 (整數、 字串、 陣列、 結構和其他) 。

本節將介紹與取用非受控 DLL 函式相關聯的工作,並提供關於平台叫用的詳細資訊。 除了下列工作之外,還有一般考量以及提供其他資訊和範例的連結。

使用匯出的 DLL 函式

  1. 識別 DLL 中的函式

    至少,您必須指定函式的名稱以及包含該函式之 DLL 的名稱。

  2. 建立類別以包裝 DLL 函式

    您可以使用現有的類別、為每個 Unmanaged 函式建立個別的類別、或建立一個類別,其中包含一組相關的 Unmanaged 函式。

  3. 在 Managed 程式碼中建立原型.

    [Visual Basic] 搭配使用宣告陳述式與函式Lib 關鍵字。 在某些罕見的情況下,您可以搭配使用 DllImportAttribute共用函式關鍵字。 關於這種情況本節會於稍後加以說明。

    [C#] 使用 DllImportAttribute 來識別 DLL 和函式。 以靜態外部修飾詞來標記方法。

    [C#] 使用 DllImportAttribute 來識別 DLL 和函式。 以外部 "C" 來標記包裝函式方法或函式。

  4. 呼叫 DLL 函式

    在您的 Managed 類別上呼叫方法,如同您呼叫任何其他 Managed 方法。 傳遞結構實作回呼函式為特殊案例。

如需示範如何建構要與平台叫用搭配使用之 .NET 型宣告的範例,請參閱使用平台叫用封送處理資料 (部分機器翻譯)。

進一步了解平台叫用

平台叫用依賴中繼資料來找出被匯出的函式,並在執行階段封送處理其引數。 下圖顯示這項程序。

Diagram that shows a platform invoke call.

當平台叫用呼叫 Unmanaged 函式時,它會依序執行下列動作:

  1. 找出包含該函式的 DLL。

  2. 將 DLL 載入到記憶體中。

  3. 在記憶體找出語言函式的位址,並將其引數推送至堆疊,視需要封送處理資料。

    注意

    僅在首次呼叫函式時尋找和載入 DLL,且尋找記憶體中的函式位址。

  4. 將控制項傳輸至 Unmanaged 函式。

平台叫用會擲回由 Unmanaged 函式產生的例外狀況給 Managed 呼叫端。

另請參閱