空白工程新建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中,运行。

例子:

  1. ########################### 生成DLL的工程: #######################
  2. 修改pro文件: TEMPLATE=lib
  3. ########################### .h文件 #######################
  4. #ifndef DLLTEST_H
  5. #define DLLTEST_H
  6. #ifdef Q_WS_WIN
  7. #define MY_EXPORT __declspec(dllexport)
  8. #else
  9. #define MY_EXPORT
  10. #endif
  11. class DllTest {
  12. public:
  13. DllTest();
  14. int getAge() {
  15. return 10;
  16. }
  17. };
  18. extern "C" MY_EXPORT int add(int a, int b) {
  19. return a + b;
  20. }
  21. extern "C" MY_EXPORT DllTest* getDllTest(); // 使用类
  22. #endif // DLLTEST_H
  23. ########################### .cpp文件 #######################
  24. #include "dlltest.h"
  25. #include <qDebug>
  26. DllTest::DllTest() {
  27. qDebug() << "Shared Dll Test";
  28. }
  29. DllTest* getDllTest() {
  30. return new DllTest();
  31. }
  32. // 如果是C++编译的函数, 要使用extern "C"来包装成C函数(导出函数, 给外部提供服务).
  1. ########################### 使用DLL的工程: #######################
  2. pro文件中加入: LIBS += "DllTest.dll"
  3. ########################### 测试.cpp文件 #######################
  4. #include "dlltest.h"
  5. #include <QLibrary>
  6. #include <qDebug>
  7. #include <QApplication>
  8. typedef int (*AddFunc)(int, int);
  9. typedef DllTest* (*GetFunc)();
  10. int main(int argc, char* argv[]) {
  11. QApplication app(argc, argv, false);
  12. QLibrary lib("DllTest");
  13. if (lib.load()) {
  14. qDebug() << "Load dll successfully.";
  15. AddFunc func = (AddFunc)lib.resolve("add");
  16. if (func) {
  17. qDebug() << func(1, 3);
  18. }
  19. GetFunc g = (GetFunc)lib.resolve("getDllTest");
  20. if (g) {
  21. DllTest *t = g(); // 使用DLL中的类
  22. qDebug() << t->getAge();
  23. delete t;
  24. }
  25. } else {
  26. qDebug() << "Load dll Failed";
  27. }
  28. return app.exec();
  29. }
 

用Qt生成dll类库及调用方法的更多相关文章

  1. vs工程生成dll文件及其调用方法

    转载:https://blog.csdn.net/weixin_44536482/article/details/91519413 vs工程生成dll文件及其调用方法                  ...

  2. Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)

     Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...

  3. QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)

    最近这阵子,接了个私活,封装一个开发包俗称的SDK给客户调用,查阅了很多人家的SDK,绝大部分用VC编写,而且VC6.0居多,估计也是为了兼容大量的XP用户及IE浏览器,XP自带了VC6.0运行库,所 ...

  4. c++ 生成dll文件并调用-转

    .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分   .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll, ...

  5. wpf窗体项目 生成dll类库文件

    我想把一个wpf应用程序的输出类型由windows应用程序改为类库该怎么做,直接在项目属性里改的话报错为 库项目文件无法指定applicationdefinition属性 wpf窗体项目运行之后bin ...

  6. java生成jar并用ikvm生成dll供C#调用

    最近想尝试用C#做NB_IOT北向API接口的访问.北向API的接口的访问需要证书的双向认证,而C#不支持双向认证,所以就使用IKVM在C#中跑JAVA程序实现HTTPS请求部分. 步骤如下: 一.使 ...

  7. C++调用C#dll类库中的方法(非显性COM)

    一般在网上搜C++如何调用C#的函数,出来的结果都是做成COM组件,但是这种方法dll安装麻烦,需要注册COM组件,需要管理员权限,调试麻烦,经常需要重启机器,反正有诸多不便. 然后在看<CLR ...

  8. js调DLL类库中的方法实现(非com组件形式)

    1.首先,创建一个Web空项目 2.添加一个html或aspx页面 3.页面代码如所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...

  9. c++ 生成dll文件并调用

    2 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.

随机推荐

  1. LeetCode 腾讯精选50题--链表排序

    解题思路:归并 先把链表拆开,分为两部分,一直拆到只剩一个元素后,进行合并,利用一个临时节点记录重排后的链表的起始位置 合并不难,困难点在于如何拆分链表,自己的大体思路是利用两个指针,一个一次移动两位 ...

  2. 【php设计模式】装饰器模式

    装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能.其结构图如下: Component为统一接口,也是装饰类和被装饰类的基本类型. ConcreteComponent为具体实现类 ...

  3. 如何用Java代码在SAP Marketing Cloud里创建contact数据

    我们可以使用SAP Marketing Cloud提供的Contact create OData API在第三方应用里创建Contact主数据. API地址:/sap/opu/odata/sap/CU ...

  4. iPhone 11来了

  5. JEESZ-SSO解决方案

    提醒:文档只是作为一个基础的参考,愿意了解的朋友可以随时咨询. 第一节:单点登录简介 第一步:了解单点登录 SSO主要特点是: SSO应用之间使用Web协议(如HTTPS),并且只有一个登录入口. S ...

  6. idea代码爆红,clean,或者maven reimport都不起作用

    1 突然自己的idea的Maven项目代码都是爆红,但是可以运行,添加新的代码确无法运行 尝试了clean,或者reimport,甚至是大家推荐的,刷新缓存重启也没有作用 2 检查项目的jdk配置,也 ...

  7. Linux学习笔记(二)Linux常用命令:权限、目录操作以及常见目录作用

    一.Linux命令格式 命令 [选项] [参数] 注:(1)简化选项和完整选项 -a --all (2)当有多个选项是可以写在一起 -l -a 可以写为-la 二.权限 -rw-r--r--.&quo ...

  8. kubernetes之node隔离与恢复

    需求: 在硬件升级, 硬件维护等情况下, 我们需要将某些node隔离, kubectl cordon <node_name> #禁止pod调度到该节点上, 在其上运行的pod并不会自动停止 ...

  9. 作业八——非确定的自动机NFA确定化为DFA

    NFA 确定化为 DFA 子集法: f(q,a)={q1,q2,…,qn},状态集的子集 将{q1,q2,…,qn}看做一个状态A,去记录NFA读入输入符号之后可能达到的所有状态的集合. 步骤: 1. ...

  10. Linux部署Django:报错 nohup: ignoring input and appending output to ‘nohup.out’

    一.部署 Django 到远程 Linux 服务器 利用 xshell 通过 ssh 连接到 Linux服务器,常规的启动命令是 python3 manage.py runserver 但是,关闭 x ...