error LNK2019:无法解析的外部符号 “__declspec(dllimport) const XXX::`vftable‘“

在Debug模式下编译,正常。但是切换到Release模式下编译,就出现了这个错误提示。

在网上搜索了一些解决方案,从这篇文章中得到一些启发。error LNK2001: 无法解析的外部符号 “__declspec(dllimport) const XXX::`vftable‘“_wquasdf的博客-CSDN博客_vftable无法解析问题描述使用VS2017编译DLL,报链接错误error LNK2001: 无法解析的外部符号 "__declspec(dllimport) const XXX::`vftable'" 分析一般链接问题都是相应的lib文件没有正确设置,要么没有添加依赖库路,要么没有添加依赖库。但仔细检查发现这些都已经正确设置了,那么问题会初中哪儿呢?上网查吧,看看网友们怎么说。1、字符集冲突生成DLL和使用DLL的工程编译的字符集不同导致。测试之后发现不行!2、缺少宏定义只查到了一份缺https://blog.csdn.net/wquasdf/article/details/113995371

首先,作为一个dll工程,对外导出时,应是__declspec(dllexport),而非__declspec(dllimport)。

其次,查了一下我的dll工程,是采用了AFX_EXT_CLASS宏,来作为类的导出声明。但是这个AFX_EXT_CLASS是为了在主工程(调用dll工程)和dll工程,根据_AFXEXT宏,而为"__declspec(dllimport)"(主工程使用) 还是"__declspec(dllexport)"(dll工程使用)。

最后,比较了一下Debug模式和Release两种模式下的“预处理器”,发现Debug模式下有_AFXEXT,而Release模式下没有_AFXEXT,所以导致了Release模式下,编译出现了这个__declspec(dllimport)。

在Release模式下的预处理器,加上_AFXEXT宏,问题解决。

你可能感兴趣的:(笔记,c++)