高分求教,Qt如何加载调用win32程序编译的DLL

高分求教,Qt如何加载调用win32程序编译的DLL,第1张

Qt提供了一个 QLibrary 类供显示调用。下面给出一个完整的例子:

testDLL.dll为自定义的dll文件,将其复制到程序的输凳橡出目录下就可以调用。

#include <QApplication>

#include <QLibrary>

#include <QDebug>

#include <QMessageBox>

typedef int (*Fun)(int,int)//定义函数指针,以备调用

int main(int argc,char **argv)

{

QApplication app(argc,argv)

QLibrary mylib("testDLL.dll") //声明所用到的枣搭旁dll文件

int result

if (mylib.load()) //判断是否正确加载

{

QMessageBox::information(NULL,"OK","DLL load is OK!")

Fun open=(Fun)mylib.resolve("add") //援引 add() 函数

if (open) //是否成功连接上 add() 函数

{

QMessageBox::information(NULL,"OK","Link to Function is OK!")

result=open(5,6) //这里函数指针调用dll中的 add() 函数

qDebug()<<result

}

else

QMessageBox::information(NULL,"NO","Linke to Function is not OK!!!!")

}

else

{

QMessageBox::information(NULL,"NO","DLL is not loaded!")

return 0 //加载失败枝扒则退出

}

}

 64位可以编32位的程序出来,在各种FLAGS中增加 -m32 编出来的就是32位程序,连接时兄宏自然是找32位的共享库

这个要看发行版对32位支持的实现,比如gentoo下如果开abi支持双架构那很可能悲剧,因为有些包还没跟上,如果用binary的32位库又会因为版本不同出现莫名其妙的问题,比如fontconfig的坑。

我在64位编32位程序都是使用chroot的方法,这样就可以把32位的头文件库什么的全放在某个地方。我用的仿尘山是ubuntu,32位库和64位库位置不一样,一般可以直接安装32位的库,如果遇到某些比较特殊的库,一般都可以通过重新编译增加rpath解决,如果没源码也可以用patchelf直接给elf上rpath。

如果您认可我的答案,请采纳。

您的采纳,是我答题的动力,O(∩_∩)O谢谢!!备中


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12546264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存