zoukankan      html  css  js  c++  java
  • Qt+VS2019 创建并调用dll文件

    1 背景

    (1)将现有的能正常运行的qt项目转化为dll,并在其他程序调用和显示;
    (2)已经在vs2019中装了qt5.12.5的插件

    2 思路

    分两步,先生成dll,然后再调用

    3步骤

    3.1 生成dll

    (1)在vs中打开qt项目
    image
    如图,依次点击【扩展】——》【Qt VS Tools】——》【Open Qt Project File】,然后选择要打开的Qt项目;
    (2)配置属性
    image
    a、打开项目的属性文件,在【配置属性】——》【常规】——》【配置类型】中选择【动态库(.dll)】;
    image
    b、在属性文件的【连接器】——》【输出文件】中,改为以.dll结尾的名称;
    (3)添加头文件
    a、添加定义宏的头文件
    image
    如图,在项目的heard files文件夹上,点击鼠标右键,添加【新建项】,在新建项内选择.h文件,并命名为XXX_global.h,在内容中添加如下代码:

    点击查看代码
    #pragma once
    
    #include <QtCore/qglobal.h>
    
    #ifndef BUILD_STATIC
    # if defined(SAMP8_2_LIB)
    #  define SAMP8_2_EXPORT Q_DECL_EXPORT
    # else
    #  define SAMP8_2_EXPORT Q_DECL_IMPORT
    # endif
    #else
    # define SAMP8_2_EXPORT
    #endif
    
    【注】这里需要添加预处理器定义

    image
    如上图所示,在【属性】——》【C/C++】——》【预处理器】——》【预处理器定义】,在里面添加头文件中链接库,即添加(SAMP8_2_LIB),头文件中第4行代码定义的啥,这里就输入啥;
    (b)添加函数接口头文件
    添加步骤同添加XXX_global.h的方式一样,只是名字定义为XXX.h。在此文件中添加需要导出函数的声明;

    点击查看代码
    #pragma once
    
    #include "samp8_2_global.h"
    
    class SAMP8_2_EXPORT Samp8_2
    {
    public:
        Samp8_2();
    };
    extern "C" SAMP8_2_EXPORT int getVersion();
    extern "C" SAMP8_2_EXPORT int realmain(int argc, char* argv[]);
    
    (4)实现头文件中声明的函数 【注】这里直接在当前项目的mian函数中,添加头文件,并修改mian函数的名字为realmain,代码如下:
    点击查看代码
    #include "widget.h"
    #include <QApplication>
    
    #include"samp8_2.h"
    
    int realmain(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;
        w.show();
    
        return a.exec();
    }
    

    这就可以生成dll文件了,一般可在当前项目的的debug文件夹下查看。

    3.2调用dll

    (1)创建一个qt应用程序
    image
    如上图所示。添加一个Qt widgets Application。
    (2)配置程序属性
    【a】配置附加包含目录
    image
    如上图所示,在应用的【属性】——》【C/C++】——》【附加包含目录】中,添加生成dll项目头文件所在的目录;
    【b】配置链接器附加库目录
    image
    如上图,在【属性】——》【链接器】——》【附加库目录】中,将库的.lib所在的路径添加进来;
    【c】配置链接器中的附加依赖项
    image
    如上图,输入库的.lib名字;
    【d】复制dll文件到应用程序的运行目录下;
    可以手动复制dll到应用程序的运行文件夹下,也可以通过设置命令行进行自动复制;自动复制的设置如下:
    image
    在【属性】——》【生成事件】——》【生成后事件】——【命令行】。输入
    xcopy /y /d "..\..\MathLibrary\$(IntDir)samp8_2.dll(自己的dll的路径,绝对/相对都可以)" "$(OutDir)"

    3.3调用库文件中的函数

    int c = realmain(argc, argv);

    参考文献

    【1】https://blog.csdn.net/snail2651/article/details/80902328
    【2】https://docs.microsoft.com/zh-cn/cpp/build/dlls-in-visual-cpp?view=msvc-170

  • 相关阅读:
    使用 yo 命令行向导给 SAP UI5 应用添加一个新的视图
    SAP Fiori Elements 应用的 manifest.json 文件运行时如何被解析的
    SAP UI5 标准应用的多语言支持
    微软 Excel 365 里如何设置下拉菜单和自动高亮成指定颜色
    SAP Fiori Elements 应用里的 Title 显示的内容是从哪里来的
    本地开发好的 SAP Fiori Elements 应用,如何部署到 ABAP 服务器上?
    如何在 Cypress 测试代码中屏蔽(Suppress)来自应用代码报出的错误消息
    教你一招:让集群慢节点无处可藏
    应用架构步入“无服务器”时代 Serverless技术迎来新发展
    MySQL数据库事务隔离性的实现
  • 原文地址:https://www.cnblogs.com/neverguveip/p/15634941.html
Copyright © 2011-2022 走看看