无法从EXE导出变量以在DLL中使用

时间:2017-07-07 18:48:31

标签: c++ dll mfc

我有一个常规的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   

我有点失落。我看到很多关于函数的例子,但是变量并不多,如何导出它们以及名称装饰是否仍在使用?

1 个答案:

答案 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依赖项时,它就消失了。

希望这会有所帮助。