我一直在修复旧版 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;
按照托尼的建议(正如我之前尝试过的那样)会产生不同的预期装饰,但仍然没有删除它:
未解析的外部符号 __imp__MyNewVariable
如何编写声明以便可以从 C 应用程序访问 C++ DLL 变量?
答案
正如 botismarius 和其他人(非常感谢所有人)所指出的,我需要链接 DLL 的 .lib。为了防止名称被破坏,我需要在没有装饰器的情况下声明它(在 C 源代码中),这意味着我需要使用 .lib 文件。
您必须链接到编译 DLL 后生成的库。在项目的链接器选项中,您必须添加.lib
文件。是的,您还应该将变量声明为:
extern "C" { declspec(dllimport) char MyNewVariable; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)