在 C++ 中使用明確的 PInvoke (DllImport 屬性)
更新:2007 年 11 月
.NET Framework 為 Dllimport 屬性 (Attribute) 提供明確的平台叫用 (或 PInvoke) 功能,可讓 Managed 應用程式呼叫封裝於 DLL 內部的 Unmanaged 函式。當 API 封裝成 DLL 且無法取得原始程式碼時,就需要使用明確的 PInvoke。例如,呼叫 Win32 函式時必須使用 PInvoke,其他情形則使用隱含的 P{Invoke。如需詳細資訊,請參閱使用 C++ Interop (隱含 PInvoke)。
PInvoke 是利用 DllImportAttribute 來運作。這個屬性使用 DLL 的名稱做為第一個引數,它應該置於每個要使用之 DLL 進入點 (Entry Point) 的函式宣告之前。函式的簽章 (Signature) 必須與 DLL 匯出的函式名稱相符 (但是就 Managed 型別而言,某些型別轉換可以藉由定義 DllImport 宣告隱含地執行)。
結果就是會為每個原生 (Native) DLL 函式 (包含必要的轉換代碼 (或 Thunk) 和簡單的資料轉換) 產生 Managed 進入點。然後,Managed 函式就可以透過這些進入點,呼叫到 DLL。插入模組做為 PInvoke 結果的程式碼完全屬於 Managed 程式碼,並且 /clr、/clr:pure 和 /clr:safe 等編譯支援明確 PInvoke。如需詳細資訊,請參閱純粹的和可驗證的程式碼。