從DLL

2013-12-20 21 views
0

下導出全局常量變量是我與Qt框架使用的代碼的簡化版本:從DLL

了foo.h:

// Defines DLL import or export as required 
#if defined(REGEXUTIL_LIBRARY) 
    #define LIBRARY_EXPORT Q_DECL_EXPORT 
#else 
    #define LIBRARY_EXPORT Q_DECL_IMPORT 
#endif 

LIBRARY_EXPORT extern const QString testString; 

Foo.cpp中:

#include "foo.h" 
LIBRARY_EXPORT const QString testString = "Test string"; 

TEST.CPP,在模塊其中進口此DLL:

const QString s = testString; 

我知道DLL和測試編譯和鏈接正確,因爲上述工作與非常量QString。但是,當我編譯QString常量時,我​​在編譯測試時遇到了無法解析的外部符號錯誤,我假設這是因爲const變量未在頭文件中初始化。如果我在那裏初始化它,當我嘗試編譯測試時,我得到錯誤的DLL導入前綴不被允許。

解決此錯誤的正確方法是什麼?我想能夠從導入此DLL的模塊訪問const QString變量。

+0

您是否嘗試過不使用'extern'關鍵字? – Rob

+0

如果我擺脫了extern,那麼使用「testString已經在foo.obj中定義」編譯的DLL錯誤。 – x6herbius

回答

0

如果常量字符串的解決方案在報頭被定義是可以接受的你,有沒有必要導入符號都:

//foo.h 
static const QString testString = "Test string"; 

應該是不夠的 - 的TestString既可以在模塊導入的DLL進行訪問並在DLL本身。

+0

這是否意味着如果這個頭文件包含在很多不同的文件中會有多個定義錯誤? – x6herbius

+0

@ x6herbius不,因爲它被定義爲靜態。 –

+0

哎呀,沒有注意到。理論上應該工作,我現在就測試它。 – x6herbius