dllimport與dllexport作用與區別

2021-10-07 22:08:03 字數 1095 閱讀 2256

從msdn的(在dll中為匯出類,在呼叫dll工程的exe中為匯入類)解釋中可以知道

在編譯dll的時候,動態庫上的類,函式,變數都應該用dllexport設定為匯出

在使用dll時,動態庫上的類,函式,變數都應該用dllimport設定為匯入

如何做到這點呢

乙個簡單的做法就是在dll的.cpp加入

#define dllclass_exports
在標頭檔案中加入

#ifdef  dllclass_export	

#define ext_class _declspec(dllexport)

#else

#define ext_class _declspec(dllimport)

#endif

這樣的話dll的cpp檔案在編譯的時候因為dllclass_exports有定義,所以ext_class被定義為dllexport(匯出)

使用dll的時候是不需要cpp檔案,因此dllclass_exports沒有定義,所以ext_class被定義為dllimport(匯入)

_declspec(dllexport)與_declspec(dllimport)是相互呼應,只有在dll內部用dllexport作了宣告,才能 在外部函式中用dllimport匯入相關**。實際上,在應用程式訪問dll時,實際上就是應用程式中的匯入函式與dll檔案中的匯出函式進行鏈結。而 且鏈結的方式有兩種:隱式迎接和顯式鏈結。

隱式鏈結是指通過編譯器提供給應用程式關於dll的名稱和dll函式的鏈結位址,而在應用程式中不需要顯式地將dll載入到記憶體,即在應用程式中使用dllimport即表明使用隱式鏈結。不過不是所有的隱式鏈結都使用dllimport。

顯式鏈結剛同應用程式用語句顯式地載入dll,編譯器不需要知道任何關dll的資訊

dllimport是為了更好的處理類中的靜態成員變數的,如果沒有靜態成員變數,那麼這個__declspec(dllimport)無所謂。

dllimport與dllexport作用與區別

declspec dllexport 與 declspec dllimport declspec dllexport 與 declspec dllimport 是相互呼應,只有在dll內部用dllexport作了宣告,才能 在外部函式中用dllimport匯入相關 實際上,在應用程式訪問dll時,實...

dllimport與dllexport作用與區別

declspec dllexport 與 declspec dllimport declspec dllexport 與 declspec dllimport 是相互呼應,只有在dll內部用dllexport作了宣告,才能 在外部函式中用dllimport匯入相關 實際上,在應用程式訪問dll時,實...

dllimport與dllexport作用與區別

declspec dllexport 與 declspec dllimport declspec dllexport 與 declspec dllimport 是相互呼應,只有在dll內部用dllexport作了宣告,才能 在外部函式中用dllimport匯入相關 實際上,在應用程式訪問dll時,實...