您的位置:首页 > 其它

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了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: