0
我有一個Visual Studio C++項目包含主程序和DLL模塊。 該DLL有一類具有以下定義:C++ dllimport:無法解析的外部與靜態字段
// .h
#ifdef _USRDLL
#define DLLAPI __declspec(dllexport)
#else
#define DLLAPI __declspec(dllimport)
#endif
class DLLAPI EClass
{
public:
static int value;
static int get_value();
};
// .cpp
int EClass::value = 1;
int EClass::get_value()
{
return value;
}
DLL項目編譯成功,兩個符號(值和的get_value)可觀察到的是通過依賴沃克。
在主程序中,我可以調用靜態函數get_value
int v = EClass::get_value(); // Ok, v = 1
但是當我嘗試訪問該字段value
直接
int v = EClass::value; // Error
我得到一個錯誤
LNK2001 unresolved external symbol "public: static int EClass::value" ([email protected]@@2HA)
可以避免使用靜態字段的訪問器?
看起來像你不導出靜態,你是否嘗試在聲明之前添加'DLLAPI'? (用於課外) – SHR
也許還需要添加到頭文件中:'extern DLLAPI int EClass :: value;'告訴你的應用程序將它導入。 – SHR
是的,我嘗試過沒有成功。 靜態字段正確導出:我有訪問它使用訪問器方法,我在DLL中看到此字段。 –