dllexport及dllimport的理解

2021-10-02 20:31:28 字數 492 閱讀 5310

對於dll匯出class,之前只使用dllexport,基本沒問題,但是陸續遇到很多鏈結問題,

如dll裡的inline函式、static成員等鏈結時查詢不到引用

持續一兩年沒找到真正原因,只能避免使用dll的inline和static

今天才發現,是一直忽略了dllimport的用法。

正確的原理是:對於乙個class,在dll專案裡需宣告為dllexport,在使用dll的專案裡宣告為dllimport。

正確做法是:在專案屬性->c++->預處理器裡定義乙個projectname_dll的巨集

然後在class的定義標頭檔案裡,這樣定義:

#ifdef projectname_dll

#define projectapi __declspec(dllexport)

#else

#define projectapi __declspec(dllimport)

#endif 

鏈結時就沒問題了

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時,實...

dllexport和dllimport的區別

declspec dllexport 宣告乙個匯出函式,是說這個函式要從本dll匯出。我要給別人用。一般用於dll中省掉在def檔案中手工定義匯出哪些函式的乙個方法。當然,如果你的dll裡全是c 的類的話,你無法在def裡指定匯出的函式,只能用 declspec dllexport 匯出類 decl...