appwyp 2023-04-26 06:58 采纳率: 43.8%
浏览 111
已结题

如何把自己写的几个类,封装成动态链接库

我写了几个类基于QObject的 用 Qt Creator IDE,想把这几个类封装成动态链接库给其它程序调用。提供header file 和 dll , .a

1
class C01 : public QObject
{
    Q_OBJECT
public:
    explicit C01(QObject *parent = nullptr);
    void API01A();
    void API01B();
...
signals:
     void sig01();
     void sig02();
...

};
#endif
------------------------------------------------------------------------------------------------
类2
class C02 : public QObject
{
    Q_OBJECT
public:
    explicit C02(QObject *parent = nullptr);
    void Api02A();
    void API02B();
...
signals:
     void sig02A();
     void sig02B();
...

};
#endif
----------------------------------------------------------------------------------------------
如何把上面两个类 C01, C02 封装到一个库里面

 QtCreator 生成的下面代码, 其它用户是不是先得new 个 Libdemo 实例,再去调用 C01, C02 里面的APIs

libdemo.h
class LIBDEMO_EXPORT Libdemo
{
public:
    Libdemo();
  
};
--------------------------------------------------------------------------------------------------
libdmo_global.h
#include <QtCore/qglobal.h>

#if defined(LIBDEMO_LIBRARY)
#  define LIBDEMO_EXPORT Q_DECL_EXPORT
#else
#  define LIBDEMO_EXPORT Q_DECL_IMPORT
#endif
-----------------------------------------------------------------------------------------------------------------------------------



  • 写回答

9条回答 默认 最新

  • CF2301_77400554X 2023-04-26 07:16
    关注

    引用chatgpt部分指引作答:
    首先,将您的类封装为动态链接库需要以下步骤:

    在 Qt Creator IDE 中创建新的项目,选择 “Library” 项目类型。
    将您的类文件添加到项目中,确保它们都在包含了正确的头文件和库的情况下编译通过。
    将项目配置为生成动态链接库。在 Qt Creator 中,可以在项目文件的左侧栏中选择 “Projects” 选项卡,然后选择 “Build” 子选项卡,找到 “Build Settings” 部分,并在 “Build Target” 下拉列表中选择 “Shared Library”。
    编译项目并生成动态链接库文件。
    以下是一些代码示例,说明如何封装您的类为动态链接库:

    libdemo.h

    #ifndef LIBDEMO_H
    #define LIBDEMO_H
    
    #include "c01.h"
    #include "c02.h"
    
    class LIBDEMO_EXPORT Libdemo
    {
    public:
        Libdemo();
        C01* createC01();
        C02* createC02();
    };
    
    #endif // LIBDEMO_H
    

    libdemo.cpp

    #include "libdemo.h"
    
    Libdemo::Libdemo()
    {
    }
    
    C01* Libdemo::createC01()
    {
        return new C01();
    }
    
    C02* Libdemo::createC02()
    {
        return new C02();
    }
    

    然后,用户可以通过在其代码中链接到生成的动态链接库并创建 Libdemo 实例来访问您的类:

    #include "libdemo.h"
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        Libdemo libdemo;
        C01* c01 = libdemo.createC01();
        C02* c02 = libdemo.createC02();
    
        // 使用您的类对象
    
        return a.exec();
    }
    

    由于您的类是基于 QObject 的,因此在创建它们的实例时,应该将其父对象设置为合适的父对象,以确保正确的内存管理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 赞助了问题酬金50元 4月26日
  • 创建了问题 4月26日

悬赏问题

  • ¥15 PPOCRLabel
  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡