C++;dllimport:带有静态字段的未解析外部 我有一个Visual Studio C++项目,包含主程序和DLL模块。 DLL有一个具有以下定义的类: // .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; }

C++;dllimport:带有静态字段的未解析外部 我有一个Visual Studio C++项目,包含主程序和DLL模块。 DLL有一个具有以下定义的类: // .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; },c++,visual-c++,dllimport,dllexport,C++,Visual C++,Dllimport,Dllexport,DLL项目编译成功后,依赖项Walker可以观察到两个符号(value和get_value) 在主程序中,我可以调用静态函数get\u value int v = EClass::get_value(); // Ok, v = 1 但是当我试图直接访问字段值时 int v = EClass::value; // Error 我犯了一个错误 LNK2001 unresolved external symbol "public: static int EClass::value" (?val

DLL项目编译成功后,依赖项Walker可以观察到两个符号(value和get_value)

在主程序中,我可以调用静态函数
get\u value

int v = EClass::get_value();  // Ok, v = 1
但是当我试图直接访问字段
值时

int v = EClass::value;  // Error
我犯了一个错误

LNK2001 unresolved external symbol "public: static int EClass::value" (?value@EClass@@2HA)

可以避免对静态字段使用访问器吗?

\u USRDLL
应仅在DLL项目中定义。

看起来您没有导出静态字段,您是否尝试在声明之前添加
DLLAPI
?(对于类外)可能还需要添加到头:
extern DLLAPI int EClass::value
告诉你的应用程序dllimport它。是的,我尝试过,但没有成功。静态字段已正确导出:我可以使用访问器方法访问该字段,并且在DLL中看到该字段。可能与@AndreyNasonov重复您是否使用其他DLL中的DLL?如果是这样,使用
\u USRDLL
宏而不是每个dll的唯一宏可能会导致问题,不管怎样,对于使用它的单个dll和单个exe,它对我有效,而不会对我的visual studio 10 express进行任何更改。