error LNK2019:无法解析的外部符号.lib是用vc6编的,其中用到了消息响应,vc6的消息响应函数和vc2005的消息响应函数的参数和返回值类型不同造成的链接问题.

一般情况下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了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值