Visual c++ LNK2001&;LNK1120当在项目中包含DLL时-MSVC++;

Visual c++ LNK2001&;LNK1120当在项目中包含DLL时-MSVC++;,visual-c++,dll,extern,lnk2001,Visual C++,Dll,Extern,Lnk2001,我有一个DLL和lib文件。我已经将它们包含在根源目录中,并通过其他依赖项添加了lib引用。但是,我得到以下错误: 1>main.obj : error LNK2001: unresolved external symbol "class game::c_State game::state" (?state@game@@3Vc_State@1@A) fatal error LNK1120: 1 unresolved externals 从“engine.h”中引用此项: 在“state.

我有一个DLL和lib文件。我已经将它们包含在根源目录中,并通过其他依赖项添加了lib引用。但是,我得到以下错误:

1>main.obj : error LNK2001: unresolved external symbol "class game::c_State game::state" (?state@game@@3Vc_State@1@A)
fatal error LNK1120: 1 unresolved externals
从“engine.h”中引用此项:

在“state.cpp”(来自DLL的源代码)中,声明为

namespace game
{
    c_State state;
    //clipped for relevance
}
我是否需要将DLL放在某个特定的位置?Windows知道去哪里看吗?我在属性中找不到专门引用DLL文件的地方,只有lib文件

另外,在声明变量或仅声明函数时是否需要_declspec(dllexport)


提前谢谢

您必须将_declspec(dllexport)应用于定义,而不是声明。另外,在另一个项目中,该声明需要uu declspec(dllimport)。因此在.h文件中:

#undef EXPORT
#ifdef FOO_EXPORTS
#  define EXPORT __declspec(dllexport)
#else
#  define EXPORT __declspec(dllimport)
#endif

extern EXPORT int shared;
在DLL源代码文件中:

__declspec(dllexport) int shared;

在DLL项目中使用project+属性、C/C++、前处理器。将FOO_导出添加到预处理器定义。

您必须将u declspec(dllexport)应用于定义,而不是声明。另外,在另一个项目中,该声明需要uu declspec(dllimport)。因此在.h文件中:

#undef EXPORT
#ifdef FOO_EXPORTS
#  define EXPORT __declspec(dllexport)
#else
#  define EXPORT __declspec(dllimport)
#endif

extern EXPORT int shared;
在DLL源代码文件中:

__declspec(dllexport) int shared;

在DLL项目中使用project+属性、C/C++、前处理器。将FOO_导出添加到预处理器定义中。

谢谢。我假设ifdef和else语句是为了可移植性。如果我决定在Linux下编译引擎,我可以简单地删除FOO_导出,然后(假设其他可移植代码)编译。谢谢。我假设ifdef和else语句是为了可移植性。如果我决定在Linux下编译引擎,我可以简单地删除FOO_导出,然后(假设其他可移植代码)编译。