在 C++ 中使用明確的 PInvoke (DllImport 屬性)
.NET Framework 提供明確的平台調用 (或 PInvoke) 功能與 Dllimport
屬性,以允許 Managed 應用程式呼叫封裝在 DLL 內的 Unmanaged 函式。 當 Unmanaged API 封裝為 DLL 且原始碼無法使用的情況下,需要明確 PInvoke。 例如,呼叫 Win32 函式需要 PInvoke。 否則,請使用隱含 P{Invoke;如需詳細資訊,請參閱 使用 C++ Interop (隱含 PInvoke) 。
PInvoke 的運作方式是使用 DllImportAttribute。 這個屬性會採用 DLL 的名稱做為其第一個自變數,會放在要使用的每個 DLL 進入點的函式宣告之前。 函式的簽章必須符合 DLL 導出的函式名稱(但某些型別轉換可以透過定義 DllImport
Managed 型別的宣告來隱含執行。
結果是每個原生 DLL 函式的 Managed 進入點,其中包含必要的轉換程式碼 (或 thunk) 和簡單資料轉換。 Managed 函式接著可以透過這些進入點呼叫 DLL。 由於 PInvoke 的結果,插入模組的程式代碼完全受控。