Dll巢狀呼叫

2021-06-28 10:22:18 字數 1443 閱讀 1188

問題描述:

有乙個公共的標頭檔案裡面有這麼一段描述

#define dll_import __declspec(dllimport)

#define dll_export __declspec(dllexport)

#ifdef win32

#ifndef dll_export_api

#define dll_export dll_import

#else

#define dll_export dll_export

#endif

#else

#define dll_export

#endif

#define dll_std_fun extern "c" dll_export

然後有乙個dll工程 如test

在工程的屬性中預定義了 dll_erport_api

在test.h檔案中定義乙個函式(包含公共的標頭檔案)

dll_std_fun void function();

test.cpp

void function()

編譯生成test.dll、test.lib

新建乙個dll工程test2

在test2.h標頭檔案中包含:公共標頭檔案

在工程的屬性中預定義了 dll_erport_api

dll_epprot_api void function2();

#param(lib,"test1.lib");

void function2()

編譯生成test2.dll、test2.lib

然後在另乙個工程中呼叫test2.dll中的函式function2時,函式裡的function執行失敗

檢查後發現是共用乙個巨集的原因(dll_eport_api)

在test2中 functiona()被解析成匯出函式了

#ifdef win32

#ifndef dll_export_api

#define dll_export dll_import

#else

#define dll_export dll_export

#endif

#else

#define dll_export

#endif

#define dll_std_fun extern "c" dll_export

因為在test2的工程中設定了預定義dll_export_api

解決方法:

在test2工程中去掉預定義dll_export_dll

test2.h檔案不變,在test2.cpp檔案中加入

#ifndef dll_export_dll

#define dll_export_dll

#endif

這樣呼叫test2.dll的函式function2時,test.dll的function就能被正確地解析成匯入函式了

關於DLL巢狀封裝及呼叫

最近閒來無事想對log4net進行封裝,封裝成靜態函式,呼叫時不需要管配置檔案,不需要進行配置,直接通過靜態函式記錄日誌。將log4net.dll封裝成自己的類庫logtool.dll 但是在呼叫時出現了問題,若是將自己生成的logtool.dll以及log4net.dll同時放在exe同目錄下,呼...

DLL動態庫巢狀跨級呼叫問題

在應用過程中,動態庫呼叫動態庫是常見操作。其在理論上可行,實施也相對簡單,呼叫層次關係如下 圖1 呼叫層次關係 針對圖1所示的應用,應對的方法如下 將dll b dll c和 dll a一起放在主程式同一目錄下即可正常呼叫。圖2 巢狀層次關係 針對圖2所示的需求,此時如果不做處理,程式執行時會提示找...

dll呼叫其他DLL

總結一下這幾天使用其他程式呼叫mfc的dll,呼叫dll裡面的視窗資源,需要把當前資源控制代碼切換到dll中一般廣泛採用 afx manage state afxgetstaticmodulestate 這個是自動化的,放在函式的開頭,在函式使用完之後,自動切換回去 發現在有些時間不好用,比如dll...