對於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...