我坚持修复旧版 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 文件。