首頁 > 後端開發 > C++ > 如何在不依賴'COMPILING_DLL”的情況下有效處理共享庫中的'dllexport”/'dllimport”?

如何在不依賴'COMPILING_DLL”的情況下有效處理共享庫中的'dllexport”/'dllimport”?

Linda Hamilton
發布: 2024-11-30 21:23:14
原創
700 人瀏覽過

How Can I Effectively Handle `dllexport`/`dllimport` in Shared Libraries Without Relying on `COMPILING_DLL`?

dllexport/dllimport 開關的巨集

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板