QT调用动态链接库实例
来源:互联网 发布:淘宝无法登录 编辑:程序博客网 时间:2024/06/11 13:56
一、动态链接库调用方式
参考http://blog.csdn.net/crich_moon/article/details/6039939
1、动态调用 Run-time Dynamic Linking
动态调用主要通过API函数(Window LoadLibrary、GetProcAddress、FressLibrary)来调用程序运行后需要的DLL函数,节省内存空间。QT中,则主要通过QLibrary进行动态加载(适用于跨平台)。
2、静态调用 Load-time Dynamic Linking
静态调用前提是在编译之前已经明确知道调用DLL中的哪些函数,需要lib和相应的导入头文件*.h。编译时,在目标文件中只保留必要的链接信息,而不含DLL函数的代码;当程序执行时,利用链接信息加载DLL函数代码并在内存中将其连接入调用程序的执行空间中,其主要目的是便于代码共享。
二、QT 5.0调用CVI生成的动态链接库实例
1、CVI生成动态链接库
CVI是个很强大的开发工具
创建过程参考
http://wenku.baidu.com/link?url=hvST1qn3UTjIYvLimf2cSDovK5YCagHU--WjRKOqXlYplBV-MXEGS-jqikiZlnRTNh3GM4efyFy_GSqGC26QMZWN5UUBkUSmeV3uJPXrBj3
创建过程参考
http://wenku.baidu.com/link?url=hvST1qn3UTjIYvLimf2cSDovK5YCagHU--WjRKOqXlYplBV-MXEGS-jqikiZlnRTNh3GM4efyFy_GSqGC26QMZWN5UUBkUSmeV3uJPXrBj3
代码dll1.h和dll1.c#ifndef __dll1_H__#define __dll1_H__#include "cvidef.h"int __stdcall Add(int, int);#endif /* ndef __dll1_H__ */
#include <cvirte.h>#include "dll1.h"int __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){switch (fdwReason){case DLL_PROCESS_ATTACH:if (InitCVIRTE (hinstDLL, 0, 0) == 0)return 0; /* out of memory */break;case DLL_PROCESS_DETACH:CloseCVIRTE ();break;}return 1;}int __stdcall DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){/* Included for compatibility with Borland */return DllMain (hinstDLL, fdwReason, lpvReserved);}/*extern "C" */int __stdcall Add(int x, int y){return x+y;}
2、QT动态链接库的调用
2.1 动态调用
#include "mydlg.h"#include "ui_mydlg.h"#include "qmessagebox.h"#include <QLibrary>MyDlg::MyDlg(QWidget *parent) : QDialog(parent), ui(new Ui::MyDlg){ ui->setupUi(this);}MyDlg::~MyDlg(){ delete ui;}void MyDlg::on_pushButton_clicked(){ int a = 10; int b = 11; int c = 0; typedef int (*myfun)(int ,int); QLibrary hdll("dll1.dll"); if(hdll.load()) { QMessageBox::about(this, "Msg","Load Success!"); myfun fun1 = (myfun)hdll.resolve("Add"); if(fun1) { c = fun1(a, b); QString result_msg = tr("dll加载成功!")+QString::number(c,10); QMessageBox::about(this, "Result", "The Sum is "+result_msg); } hdll.unload(); }}
2.2 静态调用
参考http://hi.baidu.com/ayuyuan/item/756788382b4c95573075a1c6
在XX.pro中添加: LIBS += ./debug/dll1.lib
创建并添加头文件:dll2.h
创建并添加头文件:dll2.h
//dll2.h#ifndef DLL2_H#define DLL2_H//#pragma comment(lib, "dll1.lib")extern "C" __declspec(dllimport) int __stdcall Add(int, int);#endif // DLL1_H//myDlg.cpp中直接使用DLL函数void MyDlg::on_pushButton_clicked(){ int a = 10; int b = 11; int c = 0; c = Add(a, b); QString result_msg = tr("dll加载成功!")+QString::number(c,10); QMessageBox::about(this, "Result", "The Sum is "+result_msg);}
- QT调用动态链接库实例
- Qt .so动态链接库调用,配置
- Qt 动态链接库
- Qt调用VC++生成的动态链接库
- QT动态链接库(DLL)的创建和调用
- Qt调用系统动态链接库(系统API)
- QT隐式调用动态链接库(转)
- 如何完成一个动态链接库,完成JNI调用实例
- QT调用VC 动态链接库 解决QT打开或保存文件时闪退的问题
- Qt加载动态链接库
- Qt加载动态链接库
- qt 动态链接库dll
- Qt 加载动态链接库
- Qt创建动态链接库
- 实例动态链接库编程
- 实例动态链接库编程
- JNative 调用动态链接库 调用动态链接库函数
- 编译链接动态链接库生成调用
- IOS 解决 IOS 7 界面 混乱问题 --- 在某些界面问题解决不了时可以加上这段代码试试
- java抽象类与接口的区别
- html form中的button引起的问题
- Linux下Vim改造成IDE
- 基于visual Studio2013解决C语言竞赛题之0205位数求和
- QT调用动态链接库实例
- ubuntu 安装node.js 最新版本
- 个人能力--有效性
- ALV 例子
- socket 10038错误
- ios学习笔记之OC篇(二):引用计数
- “初始化“AxShockwaveFlashObjects.AxShockwaveFlash”时引发了异常。
- WPF设置的应用程序图标为什么不管用
- CSDN问答频道“华章杯”11月份排行榜出炉,请上榜用户提交相关邮寄信息