• 4493阅读
  • 5回复

[提问]使用QT加载VS2010的DLL失败。 [复制链接]

上一主题 下一主题
离线terranrmb
 

只看楼主 倒序阅读 楼主  发表于: 2016-04-19
我的环境:QT5.6-VS2015-Window7-64
因为工作需要,要在项目工程加载一个DLL,该DLL曾经在VS2010的环境下加载成功。
目前我分别使用LOADLIBRARY和QLIBRARY来加载该DLL 都在LOAD的时候失败了。
我个人分析应该是编译器不同导致的,但是很怀疑VS2015和2010之间会有编译器问题吗?
现在我使用qmake和jom来编译工程,jom是调用VS2015的编译器来完成编译吗?

请高手指教。
离线terranrmb

只看该作者 1楼 发表于: 2016-04-19
哦,更新一些信息,我用vs2015创建了一个工程,也可以成功加载那个DLL。但是QT使用VS2015的编译器的工程却加载失败。求教这两者有何不同?如何让QT加载成功?
离线姜小白

只看该作者 2楼 发表于: 2016-04-19
情况很多,比如字符串是否是不同编码,Unicode 和 Utf-8 区别;
或者用QLIBRARY是,你的函数定义时是否正确;
接口导出时 stdcall 和 cdecl 的区别等等。。。
我整理的一些文章,持续更新中,有兴趣的小伙伴可以关注。
https://xiaozhuanlan.com/sorghum-cpp?rel=sorghum

Qt技术交流:QQ2499971906
离线terranrmb

只看该作者 3楼 发表于: 2016-04-20
回 姜小白 的帖子
姜小白:情况很多,比如字符串是否是不同编码,Unicode 和 Utf-8 区别;
或者用QLIBRARY是,你的函数定义时是否正确;
接口导出时 stdcall 和 cdecl 的区别等等。。。 (2016-04-19 20:42) 

哦,感谢回复。现在是显式加载DLL就失败,还没到方法调用的步骤。字符串因为接口需要,统一采用了宽字符。而且用VS2015加载时,使用的是同样的代码,所以应该不是这几个问题。
离线terranrmb

只看该作者 4楼 发表于: 2016-04-20
问题已经解决了……是因为该DLL是32位的。
离线chongyong

只看该作者 5楼 发表于: 2018-06-04
大佬还在吗,我最近在做一个vs中编译dll,qt中调用。遇到一个问题。
    QLibrary myDll("dlltest.dll");
    if(!myDll.load())
    {
        qDebug() << "load dll error info:" << myDll.errorString();
    }
如上,一直加载dll失败,load dll error info: "Cannot load library dlltest.dll: %1 不是有效的 Win32 应用程序。"
错误信息如上,有可能是啥原因导致的。
快速回复
限100 字节
 
上一个 下一个