用Qt生成dll类库及调用方法
空白工程新建DLL后,将DLL和LIB文件放入需要调用的“指定目录”
项目-》属性->连接器-》常规-》附加库目录->添加“指定目录”
项目-》属性->连接器-》输入-》附加依赖项->添加“LIB文件”
添加头文件到项目中,则DLL可用!
VC6.0:
使一个项目编译生成DLL库而不生成可执行文件:
删除main()方法;
将.pro项目文件中的TEMPLATE = app改为TEMPLATE = lib。
然后编译,此时生成的就是.a和.dll的文件。
在另一个项目中调用此DLL:
在项目文件中添加LIB。如添加此行:LIBS += "D:\workspace\MRP_Common\debug\common.dll" (common.dll既是上面生成的DLL);
复制dll中类或方法的头文件到该项目中,并在要调用common.dll中类或方法的文件上面include;
make,在debug目录中生成可执行文件,然后将dll复制到debug中,运行。
例子:
- ########################### 生成DLL的工程: #######################
- 修改pro文件: TEMPLATE=lib
- ########################### .h文件 #######################
- #ifndef DLLTEST_H
- #define DLLTEST_H
- #ifdef Q_WS_WIN
- #define MY_EXPORT __declspec(dllexport)
- #else
- #define MY_EXPORT
- #endif
- class DllTest {
- public:
- DllTest();
- int getAge() {
- return 10;
- }
- };
- extern "C" MY_EXPORT int add(int a, int b) {
- return a + b;
- }
- extern "C" MY_EXPORT DllTest* getDllTest(); // 使用类
- #endif // DLLTEST_H
- ########################### .cpp文件 #######################
- #include "dlltest.h"
- #include <qDebug>
- DllTest::DllTest() {
- qDebug() << "Shared Dll Test";
- }
- DllTest* getDllTest() {
- return new DllTest();
- }
- // 如果是C++编译的函数, 要使用extern "C"来包装成C函数(导出函数, 给外部提供服务).
- ########################### 使用DLL的工程: #######################
- pro文件中加入: LIBS += "DllTest.dll"
- ########################### 测试.cpp文件 #######################
- #include "dlltest.h"
- #include <QLibrary>
- #include <qDebug>
- #include <QApplication>
- typedef int (*AddFunc)(int, int);
- typedef DllTest* (*GetFunc)();
- int main(int argc, char* argv[]) {
- QApplication app(argc, argv, false);
- QLibrary lib("DllTest");
- if (lib.load()) {
- qDebug() << "Load dll successfully.";
- AddFunc func = (AddFunc)lib.resolve("add");
- if (func) {
- qDebug() << func(1, 3);
- }
- GetFunc g = (GetFunc)lib.resolve("getDllTest");
- if (g) {
- DllTest *t = g(); // 使用DLL中的类
- qDebug() << t->getAge();
- delete t;
- }
- } else {
- qDebug() << "Load dll Failed";
- }
- return app.exec();
- }
用Qt生成dll类库及调用方法的更多相关文章
- vs工程生成dll文件及其调用方法
转载:https://blog.csdn.net/weixin_44536482/article/details/91519413 vs工程生成dll文件及其调用方法 ...
- Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...
- QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)
最近这阵子,接了个私活,封装一个开发包俗称的SDK给客户调用,查阅了很多人家的SDK,绝大部分用VC编写,而且VC6.0居多,估计也是为了兼容大量的XP用户及IE浏览器,XP自带了VC6.0运行库,所 ...
- c++ 生成dll文件并调用-转
.h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分 .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll, ...
- wpf窗体项目 生成dll类库文件
我想把一个wpf应用程序的输出类型由windows应用程序改为类库该怎么做,直接在项目属性里改的话报错为 库项目文件无法指定applicationdefinition属性 wpf窗体项目运行之后bin ...
- java生成jar并用ikvm生成dll供C#调用
最近想尝试用C#做NB_IOT北向API接口的访问.北向API的接口的访问需要证书的双向认证,而C#不支持双向认证,所以就使用IKVM在C#中跑JAVA程序实现HTTPS请求部分. 步骤如下: 一.使 ...
- C++调用C#dll类库中的方法(非显性COM)
一般在网上搜C++如何调用C#的函数,出来的结果都是做成COM组件,但是这种方法dll安装麻烦,需要注册COM组件,需要管理员权限,调试麻烦,经常需要重启机器,反正有诸多不便. 然后在看<CLR ...
- js调DLL类库中的方法实现(非com组件形式)
1.首先,创建一个Web空项目 2.添加一个html或aspx页面 3.页面代码如所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...
- c++ 生成dll文件并调用
2 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
随机推荐
- fragment概念理解
fragment概念理解知识,fragment概念理解图片 fragment概念理解内容,fragment概念理介绍,fragment概念理正文 Fragment是Android honeycomb ...
- python 修改、读取图片元数据
图片元数据 图片元数据(metadata)是嵌入到图片文件中的一些标签.比较像文件属性,但是种类繁多.常见的几种标准有: EXIF:通常被数码相机在拍摄照片时自动添加,比如相机型号.镜头.曝光.图片尺 ...
- yii框架下使用redis
1 首先获取到 yii2-redis-master.zip 压缩包 下载地址https://github.com/yiisoft/yii2-redis/archive/master.zip 2 把下载 ...
- 运行tomcat7w.exe提示指定的服务未安装 解决办法
一.问题重现点击bin下tomcat7w.exe出现如下提示:提示指定的服务未安装 二.原因分析tomcat7.exe和tomcat7w.exe要起作用必须先为这两个文件安装服务.其中tomcat7. ...
- python-----操作路径
分离路径.文件名 org_path = r"F:\temp\test" fpath, fname = os.path.split(org_path) print(fpath,fna ...
- linux——实际工作中如何使用linux
实际工作中,linux系统都不会在我们自己的电脑上,linux系统安装在机房的服务器上,我们操作linux不可能跑到机房去,所以我们需要有一个工具,能在公司通过网络远程连接到机房的linux服务器上 ...
- java——多线程并发库
JDK5中增加了Doug Lea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性. java.util.current包中提供了对线程优化.管理的各项操作,使得线程的使用变得的心应手.该 ...
- 实用:Java基础流计算
java的流不常用,每次学习完都懂,过了一段时间就全忘了... 记录下一点实用的东西... 需求: 截取文件的前250kb内容 public static void main(String[] arg ...
- 2sum问题求解
什么是2sum问题呢?举个例子就明白了:对于数列:[0.1.2.3.4.5.6.7.8.9],求两数相加=9的所有两数的组合,所以结果为:[0.9],[1.8],[2.7],[3.6],[4.5].所 ...
- R语言简单介绍
R语言 概述 R语言是用于统计分析,图形表示和报告的编程语言和软件环境. R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大学创建,目前由R语言开发核心团队开发. R语言的 ...