在 Windows 上使用共用程式庫時,需要定義適當的巨集來匯出和匯入函數。傳統方法涉及使用 COMPILING_DLL 巨集。
定義 COMPILING_DLL
COMPILING_DLL 巨集通常不會明確定義,並且依賴 Visual Studio 的預設行為。預設情況下,在建置 DLL 專案時被視為已定義,而在客戶端應用程式中使用 DLL 時則視為未定義。但是,這種方法在使用載入時動態連結 (LTDL) 時可能會導致問題,即您無法在兩種情況下使用相同的標頭。
替代解決方案
使用 COMPILING_DLL 的替代方法是使用專案本地定義的預設巨集。預設情況下,Visual Studio 為目前專案定義 MYDLL_EXPORTS 和 MYDLL_IMPORTS 等巨集。這些巨集可以如下使用:
#ifdef MYDLL_EXPORTS /*Enabled as "export" while compiling the dll project*/ #define DLLEXPORT __declspec(dllexport) #else /*Enabled as "import" in the Client side for using already created dll file*/ #define DLLEXPORT __declspec(dllimport) #endif
在此範例中,專案名稱為“MyDLL”,巨集 MYDLL_EXPORTS 將在建置 DLL 專案時定義,而在外部使用時未定義。透過利用這些預設宏,您可以為這兩種情況適當地定義 DLLEXPORT 宏,而不依賴 COMPILING_DLL 的存在。
以上是如何在不依賴'COMPILING_DLL”的情況下有效處理共享庫中的'dllexport”/'dllimport”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!