我有一个常规的MFC应用程序,我想从中导出变量并在dll中使用它。以下是exe / dll中声明/定义的摘要,它们应该是here。
__declspec(dllexport) BOOL g_status; // In EXE
__declspec(dllimport) BOOL g_status; // in DLL
接下来的链接器错误似乎表明由于名称损坏而找不到它?
error LNK2001: unresolved external symbol "__declspec(dllimport) int g_status" (__imp_?g_status@@3HA)
然后我尝试在exe方面添加extern "C"' to declaration in dll but it doesn't work because if I use C decorations on dll, the same has to be done on exe side as well but using 'extern "C"
这个组合实际上forces它将成为声明!
__declspec(dllexport) BOOL g_status; // in EXE
extern "C" __declspec(dllimport) BOOL g_status; // in DLL
以下链接器错误:
error LNK2001: unresolved external symbol __imp__g_status
我有点失落。我看到很多关于函数的例子,但是变量并不多,如何导出它们以及名称装饰是否仍在使用?
答案 0 :(得分:0)
这确实是Hans Passant在评论中指出的循环依赖性问题。就我而言,我希望这个变量暂时用于调试辅助,所以我不想详细说明。
我最终在其中一个dll中声明了它,并在另一个中使用了简单的定义/声明,如下所示。
__declspec(dllexport) BOOL g_status; // In EXE
__declspec(dllimport) BOOL g_status; // in DLL
但还有一个警告,调用者dll必须依赖于被调用者,否则仍会发生链接器错误。我收到此链接器错误:
error LNK2001: unresolved external symbol "__declspec(dllimport) int g_status" (__imp_?g_status@@3HA)
当我设置dll依赖项时,它就消失了。
希望这会有所帮助。