• 8946阅读
  • 5回复

Qt调用MFC的dll或者lib出错 [复制链接]

上一主题 下一主题
离线gyjt
 
只看楼主 倒序阅读 楼主  发表于: 2010-06-22
— 本帖被 wd007 设置为精华(2010-07-21) —
需要把以前用MFC写的工程移植到Qt上,工程比较大,就暂且先移植界面部分,dll库和lib库暂时不移植。
用VS2005创建Qt工程,工程本身能够写一些包含MFC特性的东西(如CString),在调用dll库或者lib库时,调用一般类型的函数返回值(int型)可以成功,但如果其中的函数有CString或者std::wstring类型的返回值时,编译不能通过。链接出错信息如下:
Linking...
qt_app.obj : error LNK2019: unresolved external symbol "public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall LibAdd::GetString(void)" (?GetString@LibAdd@@QAE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@XZ) referenced in function "private: void __thiscall Qt_App::OnOKButton(void)" (?OnOKButton@Qt_App@@AAEXXZ)

qt_app.obj : error LNK2019: unresolved external symbol "public: class ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > __thiscall LibAdd::GetCString(void)" (?GetCString@LibAdd@@QAE?AV?$CStringT@GV?$StrTraitMFC_DLL@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@XZ) referenced in function "private: void __thiscall Qt_App::OnOKButton(void)" (?OnOKButton@Qt_App@@AAEXXZ)

也听说Qt官方公布了一个移植框架Qt Winmigrate,但这个框架还只能在win32平台跑,工程需要在win32和wince平台运行,没法用。

还尝试过用QTCreater创建工程,在pro文件中添加 LIBS += D:\WorkPlace\QtWin32\Win32_Lib2.lib,出错信息一样。

没辙了,请高手指点一下。
离线bonbonice
只看该作者 1楼 发表于: 2010-07-19
类似的问题,有人知道答案吗?
好像wchar_t, wstring都会有link错误
离线bonbonice
只看该作者 2楼 发表于: 2010-07-19
终于找到原因了,

原来通常project, C++/language/Treat wchar_t as build-in type 是true
但是QT 是false.

把QT的项目设置改下就好了
离线wd007

只看该作者 3楼 发表于: 2010-07-21
这个体会还是值得推荐的。

但在Qt Creator下,不能够直接设置。
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线dbzhang800

只看该作者 4楼 发表于: 2010-07-21
恩,值得推荐。以前还没考虑过这个问题。

/Zc:wchar_t  
/Zc:wchar_t-

前者 wchar_t 是本机类型,后者 wchat_t 是typedef的其他类型,两者不同直接影响C++的名字改编,

==> 进而导致链接错误
离线wd007

只看该作者 5楼 发表于: 2010-07-21
已经设置为精华帖。

希望楼主能够就此总结一下,把本贴完善,以帮助更多的朋友。
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
快速回复
限100 字节
 
上一个 下一个