- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Qt显式调用dll
Qt显式调用C++写的dll
?这些天在做一个工程,要用到Qt,所以特别研究了一下Qt显式调用链接库的问题。隐式调用就不那么想用了,个人感觉隐式调用既浪费内存,造成程序启动速度极慢,又容易造成链接错误(本人在ogre中深受链接错误之苦),所以只用了显式调用。以前只试过在MFC中显式调用dll,在Qt上还没试过。其实细细研究一下,相对于MFC的调用来说,Qt的调用也是大同小异的。在这里分享一下。
?首先用VS写一个dll先(名字为QtDllTest)。写dll最大的问题就是解决导出函数重命名问题。其中解决方法是多种多样的。本人只用自己最常用一种——用模块定义文件.def。?第一步,写一个dll,简单写一个测试加法函数的:? int add(int a,int b)??{?????? return a+b;?? }之后添加一个模块定义文件QtDllTest.def:LIBRARY?QtDllTestEXPORTSadd之后顺利生成dll.现在可以利用dll函数导出工具DLL Export Viewer查看刚才生成的dll中的导出函数:发现,导出函数名字没有乱码,说明导出函数正常。现在,就以这个dll为例来试着用Qt调用。新建一个名为QtDllTestDemo的Qt Application:默认,下一步继续下一步:Finish就行了。反正一切默认就行。在ui界面中加入一个pushButton(ObjectName:CalButton,Text:Calculate),一个Label控件(Text:Result),一个lineEdit控件(ObjectName:Result),主要是在点击按钮后调用dll并计算把计算结果显示在文本框中,如下图所示:为了顺利使用dll,我们要在qtdlltestdemo.cpp开始包含这个东西:#includeQLibrary下面给pushButton添加click响应事件:void QtDllTestDemo::on_CalButton_clicked(){?QLibrary lib(QtDllTest.dll);?if (lib.load())?{??typedef int(*AddFunction)(int a,int b);??AddFunction Add=(AddFunction)lib.resolve(add);??if (!Add)??{???ui.Result-setText(Failed!);??}??else??{???int m;???m=Add(1,1);?//来个计算1+1???QString str=QString(%1).arg(m);???ui.Result-setText(str);??}?}?else?{??ui.Result-setText(Failed!);?}}之后生成程序,复制在开始生成的dll文件到QtDllTestDemo的Debug或者Release目录中运行,点击“Calculate按钮,发现已经成功调用:其实和MFC的调用也就差那么一两句话,真可谓大同小异。导出类中函数亦如此。
2009-06-12 10:42:58.0 ???? 来源:e800技术客
关键词:??Windows牋 牋dogcc牋 牋doQt牋 牋doDLL牋 牋do调用?
DLL与LIB的区别 :1.DLL是一个完整程序,其已经经过链接,即不存在同名引用,且有导出表,与导入表lib是一个代码集(也叫函数集)他没有链接,所以lib有冗余,当两个lib相链接时地址会重新建立,当然还有其它相关的不同,用lib.exe就知道了;2.在生成dll时,经常会生成一个.lib(导入与导出),这个lib实际上不是真正的函数集,其每一个导出导入函数都是跳转指令,直接跳转到DLL中的位置,这个目的是外面的程序调用dll时自动跳转;3.实际上最常用的lib是由lib.exe把*.obj生成的lib。(引用这里 )Qt 想调用DLL怎么办呢?最先想到的是直接调用试试看:包含头文件,并把DLL文件拷到当前目录下,调用声明的函数,结果链接时和预想的一样出错了。修改 Makefile.debug,的链接选项也不行。Windows里的gcc调编译时用的库是和Linux一样的.a文件。其实,上面用VC直接调用 DLL的方法,在Windows里其实叫“隐式链接”,相对的叫“显式链接”,可以参考CSDN的解释 。Qt调用DLL方法一:使用Win32 API 在显式链接下,应用程序必须进行函数调用以在运行时显式加载 DLL。为显式链接到 DLL,应用程序必须:? 调用 LoadLibrary(或相似的函数
原创力文档


文档评论(0)