2015-09-26 89 views
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) 

可以避免使用靜態字段的訪問器?

+0

看起來像你不導出靜態,你是否嘗試在聲明之前添加'DLLAPI'? (用於課外) – SHR

+0

也許還需要添加到頭文件中:'extern DLLAPI int EClass :: value;'告訴你的應用程序將它導入。 – SHR

+0

是的,我嘗試過沒有成功。 靜態字段正確導出:我有訪問它使用訪問器方法,我在DLL中看到此字段。 –

回答

0

應只在DLL項目中定義宏_USRDLL