我陷入了对旧版Visual C++ 6应用程序的修复。在C++ DLL源代码中,我已经输入
extern "C" _declspec(dllexport) char* MyNewVariable = 0;
这将导致MyNewVariable在导出表中显示(非常未经修饰)(如dumpbin/exports blah.dll所示)。但是,我不知道如何声明该变量,以便可以在C源文件中访问它。我尝试过各种方法,包括
_declspec(dllimport) char* MyNewVariable;
但这只是给我一个链接器错误:
未解析的外部符号“__declspec(dllimport)char * MyNewVariable”(__ imp_?MyNewVariable @@ 3PADA)
extern "C" _declspec(dllimport) char* MyNewVariable;
按照Tony的建议(以及我之前尝试过的结果)产生了不同的预期装饰,但仍然没有将其删除:
未解析的外部符号__imp__MyNewVariable
如何编写声明,以便可以从C应用程序访问C++ DLL变量?
答案
正如botismarius和其他人(非常感谢所有)所指出的,我需要链接DLL的.lib。为了防止名称被篡改,我需要在C语言中声明没有修饰符的名称,这意味着我需要使用.lib文件。
最佳答案
您必须链接编译DLL之后生成的lib。在项目的链接器选项中,必须添加.lib
文件。是的,您还应该将变量声明为:
extern "C" { declspec(dllimport) char MyNewVariable; }