QtCreator中DLL的创建和使用(权威指南,经验证):基类非QObject的类

运行环境

QtCreator4.2.1, SDK 4.8.1

原因

在制作的过程中费劲周折,最终虽然简单,但是感觉过程并不顺利。

主要原因:

        A、一方面个人悟性一般;

        B、一方面感觉帮助文档上关于这动态库创建、使用方面的描述过于笼统,

        C、一方面网络文章纷纷扰扰,

        D、最后就是没有查看例子或者源代码。

        E、xml_global.h对初学者(我、VS's)造成的干扰。

将自己的最终结果整理一下,以此记录,以利于后来人参照。

引用

参照的是人家http://blog.csdn.net/q496713258/article/details/6990837的博文,感觉人家的还是比较权威的,其他的确实让我浪费了很大精力。

只是人家的是基于QObject的类,现在我需要的是非基于QOjbect的类,整体一样只是更详细说明,以免引起初学者困惑。

创建基类非QObject的类

第一步:创建一个动态库工程:Xml











第二步:增加功能代码

在xml.h的类中增加声明:

public:

    int add(int a, int b);
在xml.cpp的类中增加实现:

void Xml::add(int a, int b)

{
    return (a+b);
}

第三步:构建动态库工程

构建后得到xml.h和xml.dll文件,这就是我们在隐式调用时要用到的。

创建动态库的测试程序

第一步:创建一个控制条工程:TestXml

第二步:引用相关头文件、动态库

在xml.pro中增加:

LIBS += ../debug/xml.dll



HEADERS += \

    ../xml.h


第三步:添加调用代码

#include <QtCore/QCoreApplication>

#include "../xml.h"
#include <QtDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    Xml xml;
    qDebug()<<"1 + 2 = "<< xml.add(1, 2);
    
    return a.exec();
}


第四步:观察运行结果

构建TestXml工程,运行如下:



后话

1、不必过多考虑xml_global.h文件,这个文件只是提供xml.h中的类是导入还是导出。

我就是不小心参照网上的一些言论,以为global.h中是向外定义接口的,不停地增加、丰富xml_global.h文件,导致无头苍蝇。


2、这个动态库是在qt下编写供qt应用程序调用的,如果需要在vs下调用这样的动态库,未知。

就好像vs下写的动态库vs下调用很简单,但是使用其它平台调用,就需要定义标准接口了一样。


3、从简单入门,这个就很简单。

如果想深入,可以研究动态显式调用、静态显式调用。

如果还想提高,还可以看看这个女士的博文(接口方面的):

Qt Creator 为我们的程序写一个动态链接库help.dll

http://blog.csdn.net/a_sungirl/article/details/8051746

修改:"Qt Creator 为我们的程序写一个动态链接库help.dll”使代码写的更专业

http://blog.csdn.net/a_sungirl/article/details/8053084





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章