Qt显式调用C++写的dll + 外一篇
来源:互联网 发布:ubuntu退出登录 编辑:程序博客网 时间:2024/05/23 15:36
这些天在做一个工程,要用到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 "QtDllTest"
EXPORTS
add
之后顺利生成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开始包含这个东西:#include<QLibrary>
下面给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的调用也就差那么一两句话,真可谓大同小异。导出类中函数亦如此。
答:创建DLL时其工程使用lib模板
Quote:
TEMPLATE=lib
而源文件则和使用普通的源文件一样,注意把头文件和源文件分开,因为在其它程序使用此DLL时需要此头文件
在使用此DLL时,则在此工程源文件中引入DLL头文件,并在.pro文件中加入下面配置项:
Quote:
LIBS += -Lyourdlllibpath -lyourdlllibname
Windows下和Linux下同样(Windows下生成的DLL文件名为yourdlllibname.dll而在Linux下生成的为libyourdlllibname.so。注意,关于DLL程序的写法,遵从各平台级编译器所定的规则。
- Qt显式调用C++写的dll + 外一篇
- Qt显式调用C++写的dll + 外一篇
- Qt显式调用C++写的dll + 外一篇
- Qt显式调用C++写的dll + 外一篇
- Qt调用C的DLL
- QT显式调用DLL的例子
- java调用C/C++写的dll
- java 调用C写的DLL
- Delphi调用C写的dll
- python 调用c写的dll/so
- PB调用C/C++写的dll
- QT显式调用VC开发的DLL
- C#下调用C写的dll的例子
- Qt隐式/显式调用DLL
- SQL Server 调用 C#.net 写的Dll
- [VB.NET]vb.net 调用c写的dll问题
- C#调用C写的DLL二级指针传递方法
- C 程序调用win32写的dll文件
- DLL导出类的问题(DLL地狱问题)
- 深入理解ANGULARUI路由_UI-ROUTER
- 是方法是否
- 编写DLL所学所思
- 在QT下编写带DLL的程序
- Qt显式调用C++写的dll + 外一篇
- Qt调用dll中的功能函数
- Leetcode: Best Time to Buy and Sell Stock III
- [外语] moonstrike
- 小胖变美女
- 本来他以为这个想法会让杨光很吃惊,而且应该会很难办
- 听到这样的解释之后,林晓第一个感觉就是“这个世界真奇妙
- “公司运作你来负责好了,今后公司就是你的了,本来咱们的小公司也是咱们一起办起来的。”
- “欢迎你来我们学校学习”