`
qimo601
  • 浏览: 3445012 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

【转】用Qt生成dll类库及调用方法

    博客分类:
  • Qt
阅读更多

 

转载:http://blog.sina.com.cn/s/blog_6a961ad40100kiey.html

 

.NET2005:

空白工程新建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();
}
分享到:
评论

相关推荐

    C#调用QT的dll方法

    C#调用QT的dll方法 在这篇文章中,我们将讨论如何在C#中调用QT的dll方法。首先,我们需要在QT平台上建立一个dll工程,设置头文件和源文件,然后生成dll文件。最后,我们可以在C#中使用DllImport特性来调用dll方法。...

    MFC程序调用Qt(DLL)界面显示

    首先,我们需要创建一个Qt项目,目标是生成一个动态链接库(DLL)。在Qt Creator中,选择"新建项目",然后选择"库" -&gt; "Qt库" -&gt; "Qt DLL"。填写必要的项目信息,如项目名、位置等,并确保选择正确的编译器和Qt版本...

    MFC调用QT类库

    MFC是微软提供的一个C++类库,用于简化Windows API的使用,而QT则是由Qt公司开发的一个跨平台的C++图形用户界面库。本教程将探讨如何在MFC项目中调用QT类库,实现如QMessageBox的弹出提示功能,并在MFC应用中动态...

    VS + QT 调用C# DLL库

    本篇文章将深入探讨如何在QT应用中调用由VS编译的C#动态链接库(DLL)。 首先,我们需要理解C# DLL库是如何创建的。在VS中,你可以创建一个类库项目,编写C#代码,并将其编译为DLL。这个DLL可以包含各种功能,如...

    Qt中调用MFC对话框

    QT是一个跨平台应用程序和UI开发...windows开Qt开发方法:一、Qt Creator+MinGW 或者 Qt Creator+VC++ Compiler二、QT4.8.5 for Windows(VS2015+VS插件)。本实例为VS2015+Qt+Qt插件中开发Qt应用程序同时调用MFC对话框。

    VS2017+QT DLL UI.zip

    在本项目中,"VS2017+QT DLL UI.zip" 包含了使用Visual Studio 2017(VS2017)集成开发环境,通过MFC(Microsoft Foundation Classes)调用QT库创建带用户界面的动态链接库(DLL)的相关资源。这个项目结合了两个...

    MFC程序调用Qt界面

    3. **跨语言调用**:由于MFC是基于C++的类库,而Qt也是使用C++编写,因此可以直接进行跨库调用。 #### 三、具体实现步骤 1. **下载Qt解决方案库** - 首先需要下载Qt的解决方案库,该库包含了将Qt与MFC集成所需的...

    QT 调用 C# DLL(CLR)

    QT调用C# DLL(CLR)是跨平台开发中的一种技术融合,允许使用Qt框架的C++代码调用由.NET Framework或.NET Core编译的C#动态链接库(DLL)。这种混合编程方式可以利用C#丰富的类库和Qt的用户界面设计能力。本文将详细...

    qt调用c语言代码(c语言的代码写在c文件中)

    6. **编译和运行Qt项目**:最后,使用qmake和make(或者直接在IDE中编译)来构建Qt项目,然后运行生成的应用程序,你应该能看到C语言代码的功能得以实现。 以上就是Qt调用C语言代码的基本流程。这个过程可能会涉及...

    Qt下实现dll文件的说明

    在Qt环境下,开发DLL(动态链接库)时,我们需要考虑如何正确地管理和使用Qt的类库,特别是当涉及到UI界面时。DLL文件是一种在Windows操作系统中广泛使用的代码和数据共享机制,它允许多个应用程序共享同一段代码,...

    使用vs2019 编译 qt-5.15.0的源码生成的完整的SDK,包括dll/pdb/h文件,可以调试qt代码

    在本文中,我们将深入探讨如何使用Visual Studio 2019(VS2019)编译Qt 5.15.0的源码,生成一个包含dll、pdb和h文件的完整SDK,以便进行Qt代码的调试。Qt是一个跨平台的应用程序开发框架,广泛应用于图形用户界面和...

    Qt与MATLAB的混合编程研究与实现

    4. **在Qt中调用DLL**:使用Qt C++代码调用生成的DLL文件。这通常涉及到加载DLL、获取函数指针以及调用这些函数的过程。 5. **数据交换**:为了确保Qt与MATLAB函数之间正确传递数据,需要处理好数据类型的转换。...

    Qt封装带界面的纯虚类动态库

    6. **使用动态库**:在目标项目中,通过`QT += core gui`等语句引入Qt模块,并使用`QMYSQLDriverPlugin`加载动态库,然后实例化并调用动态库中的类和方法。 7. **考虑平台差异**:动态库的使用可能因操作系统而异,...

    使用QT5.9开发海康威视相机,多线程下使用QLabel实时显示相机捕获的图像

    在本文中,我们将深入探讨如何使用QT5.9框架与海康威视的相机设备进行交互,以及在多线程环境中实现QLabel组件实时显示相机捕获的图像。海康威视是全球知名的安防监控设备制造商,其产品广泛应用于各种监控场景。而...

    NCReport QT qtcreator 打印预览。

    "NCReport QT qtcreator 打印预览"这个标题涉及到的是一个使用QT Creator开发的项目,该项目专注于在QT环境下实现报表的打印预览功能。NCReport可能是一个专门用于QT的报告生成库,允许用户设计和显示报表,并在QT...

    QT教程.pdf

    Qt 提供了一组范围相当广泛的 C++ 类库,并包含了几种命令行和图形界面的工具,有效地使用这些工具可以加速开发过程。Qt Designer:Qt 设计器。用来可视化地设计应用程序界面。Qt Linguist :Qt 语言学家。用来翻译...

    qtwinmigrate.rar

    4. **引入DLL**:将生成的DLL文件和相关的头文件添加到你的MFC或Win32项目中,通过正确的API调用来使用Qt的功能。 5. **调试与测试**:完成以上步骤后,进行调试和测试,确保Qt功能在MFC/Win32环境中可以正常工作。...

    QT _qtjava_Win32_RC1

    当Java应用程序需要使用Qt的组件时,它会调用这个dll文件来实现图形界面的功能。这个库文件包含了Qt的Java绑定,使得Java代码能够直接调用Qt的函数和类,实现了Java与Qt的交互。 2. **qtjava.jar**:这是一个Java ...

    HIKVISION工业相机的SDK二次开发的QT实例

    在本项目中,我们主要探讨的是使用HIKVISION的SDK进行工业相机的二次开发,并结合QT框架在Windows环境下创建一个控制台应用实例。HIKVISION是全球知名的安防设备制造商,其提供的SDK允许开发者深入定制和优化相机...

    qt-solutions.rar

    这是一个工具,它的主要作用是帮助开发者将使用MFC(微软基础类库)编写的代码迁移至QT框架下。QTwinMigrate可以简化这一过程,让MFC应用能够利用QT的特性,比如丰富的GUI控件和跨平台能力,而无需完全重写代码。 ...

Global site tag (gtag.js) - Google Analytics