运行环境
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