error LNK2019:无法解析的外部符号.lib是用vc6编的,其中用到了消息响应,vc6的消息响应函数和vc2005的消息响应函数的参数和返回值类型不同造成的链接问题.
2015-11-23 15:35
513 查看
一般情况下error LNK2019错误都是因为没有连接到正确的lib文件,今天又遇到了新的情况,特此记录。
1.无法解析的外部符号 "public:
virtual struct CRuntimeClass * __thiscall CXXX::GetRuntimeClass(void)const "
此类比较常见原因如下:
a,在.h文件中写了DECLARE_DYNAMIC,而在.cpp文件中没有写IMPLEMENT_DYNAMIC
b,在.h文件中写了DECLARE_DYNCREATE ,但在.cpp文件中没有写上IMPLEMENT_DYNCREATE
在编写自定义类时,你必须知道,如果在类定义中包含了DECLARE_DYNAMIC,那你必须在类声明中包含IMPLEMENT_DYNAMIC;如果在类定义中包含了DECLARE_DYNCREATE,你必须在类声明中包含IMPLEMENT_DYNCREATE。即消息映射在.h文件和.cpp文件中是一一对应的。
.h类中定义
DECLARE_DYNCREATE(CMView)
DECLARE_MESSAGE_MAP()
.cpp类中定义
IMPLEMENT_DYNAMIC(CMView,CView)
BEGIN_MESSAGE_MAP(CMView, CView)
END_MESSAGE_MAP()
2.
error LNK2019:无法解析的外部符号 "__declspec(dllimport) public: static struct CRuntimeClass * __stdcall CXXXView::GetThisClass(void)" (__imp_?GetThisClass@CXXXView@@SGPAUCRuntimeClass@@XZ),该符号在函数 "protected: static struct CRuntimeClass * __stdcall CXXView::_GetBaseClass(void)" (?_GetBaseClass@CXXView@@KGPAUCRuntimeClass@@XZ) 中被引用
此类一般原因如下:
CXXXView类在DLL中没有使用AFX_EXT_CLASS导出,或者是DLL是VC编译的,调用程序又是VS编写的。
解决方法:用VS打开DLL源码,重新编译,只需替换掉调用程序中的DLL即可,lib和头文件不变(DLL编译过程中没有修改源码)。
http://bbs.csdn.net/topics/340086844
.lib是用vc6编的,其中用到了消息响应,vc6的消息响应函数和vc2005的消息响应函数的参数和返回值类型不同造成的链接问题.
用vc2005 重新编译了这个.lib就ok了.
1.无法解析的外部符号 "public:
virtual struct CRuntimeClass * __thiscall CXXX::GetRuntimeClass(void)const "
此类比较常见原因如下:
a,在.h文件中写了DECLARE_DYNAMIC,而在.cpp文件中没有写IMPLEMENT_DYNAMIC
b,在.h文件中写了DECLARE_DYNCREATE ,但在.cpp文件中没有写上IMPLEMENT_DYNCREATE
在编写自定义类时,你必须知道,如果在类定义中包含了DECLARE_DYNAMIC,那你必须在类声明中包含IMPLEMENT_DYNAMIC;如果在类定义中包含了DECLARE_DYNCREATE,你必须在类声明中包含IMPLEMENT_DYNCREATE。即消息映射在.h文件和.cpp文件中是一一对应的。
.h类中定义
DECLARE_DYNCREATE(CMView)
DECLARE_MESSAGE_MAP()
.cpp类中定义
IMPLEMENT_DYNAMIC(CMView,CView)
BEGIN_MESSAGE_MAP(CMView, CView)
END_MESSAGE_MAP()
2.
error LNK2019:无法解析的外部符号 "__declspec(dllimport) public: static struct CRuntimeClass * __stdcall CXXXView::GetThisClass(void)" (__imp_?GetThisClass@CXXXView@@SGPAUCRuntimeClass@@XZ),该符号在函数 "protected: static struct CRuntimeClass * __stdcall CXXView::_GetBaseClass(void)" (?_GetBaseClass@CXXView@@KGPAUCRuntimeClass@@XZ) 中被引用
此类一般原因如下:
CXXXView类在DLL中没有使用AFX_EXT_CLASS导出,或者是DLL是VC编译的,调用程序又是VS编写的。
解决方法:用VS打开DLL源码,重新编译,只需替换掉调用程序中的DLL即可,lib和头文件不变(DLL编译过程中没有修改源码)。
http://bbs.csdn.net/topics/340086844
.lib是用vc6编的,其中用到了消息响应,vc6的消息响应函数和vc2005的消息响应函数的参数和返回值类型不同造成的链接问题.
用vc2005 重新编译了这个.lib就ok了.
相关文章推荐
- Sql Server 2008 R2数据库之登录名、用户、架构、权限和角色
- Spring中Bean的五个作用域
- tabControl 控件使用心得
- 常用api平台
- 为什么主引导记录的内存地址是0x7C00?
- 单例模式
- Objective-C Runtime
- awk 初学02
- 华为oj inoc产品部--完全数计算
- 在CentOS 6.3/6.6 64bit上源码安装cmake 3.4.0
- CSS美化上传按钮并获取上传文件路径
- Db2 sql summarize
- UDP包的最大大小是多少?
- Struts1 标签库
- 浅谈压缩感知(三):几何解释
- Spring MVC interceptor 使用
- cocos2d-x大型地图的实现
- 图书api 查询图书内容
- iOS-PCH File的快速导入方法和使用
- 成功投资者应具备的气质