Qt Creator创建使用dll

来源:互联网 发布:今日龙虎榜数据 编辑:程序博客网 时间:2024/05/15 08:17
    刚毕业入职的公司,被要求重写一个dll,由于是第一次使用Qt写dll,而且公司也只有我一个人会Qt,所以像个没头苍蝇一样不知所措,网上找大牛、混CSDN各个方式都动用了,但是每个资料都是东一榔头西一棒子,要么太深要么太浅,完全解决不了眼前问题。
    最后捣鼓了一个星期,终于弄出来了。

记录个小例子,写一个求和add(int a,int b)的dll

过程:
首先,肯定是先建立一个c++库,QtCreator里新建库,选择C++库
QtCreator创建使用dll

选择需要模块的时候,就把涉及到的模块给勾选上就行了,像本例只需要普通的代码QtCore就行了
QtCreator创建使用dll




最后项目列表里会有有这两个头文件,一个解释文件
QtCreator创建使用dll



为了简化,把addlib_global.h里的关键代码复制到addlib.h里,再把addlib.h里的#inckude即可
addlib_global.h里需要复制的关键代码
QtCreator创建使用dll




然后在addlib.h和addlib.cpp里添加所需要的函数声明和函数解释代码
addlib.h
QtCreator创建使用dll
注意,很多编译出错,是因为没有添加相应的头文件,*.h中运用到了什么模块,就一定要添加对应的头文件!
这个头文件中残留有一个名为Addlib的class类,但是是空的
因为我们只需要一个简单的add()函数,所以不需要复杂的类,我们只需要在class外面定义我们需要的函数即可,这个class无需在意。

其中
4-8行是我们之前从global.h里复制来的关键代码
19行是我们需要自定义的函数
extern "C"告诉编译器,在编译int add()函数的时候,使用C语言的方式编译,因为C++支持函数重载,所以最后生成的函数名是add加上其他字符的函数名,而加上了extern "C"之后,就不会出现这个问题。
ADDLIBSHARED_EXPORT,从我们复制的global.h而来,说明这个int add()是对外提供接口。


addlib.cpp
QtCreator创建使用dll
添加int add的解释函数,注意,class不要修改

到此dll代码完成
编译
如果你是使用点击运行,那么会QtCreator弹出来这个界面
QtCreator创建使用dll
因为我们只有一个对外接口,所以需要特定的参数来执行这个dll
不管它,关闭

我们这时就可以在代码的debug或者release目录找到名为addlib.dll的动态库文件

我们将addlib.dll和自己写的addlib.h头文件复制出来,这就是我们需要的动态库dll



接下来,我们需要测试一下这个dll能不能运行。
重新新建一个普通的Qt项目useadd,useadd项目新建一个main.cpp
让后将之前的addlib.dll和addlib.h两个文件拖到uselib代码目录下,当然你也可以放到特定的位置,不过建议放在项目的根目录下。
我是放在useadd的目录下,也有人喜欢在useadd下新建一个目录专门放dll

把addlib.h添加到该项目内,项目视图如下:
QtCreator创建使用dll
然后我们点开useadd.pro项目配置文件
添加对应的dll文件路径
LIBS += addlib.dll
QtCreator创建使用dll
因为我是把dll放在了根目录下,所以直接添加了文件名即可
如果是放在其他位置,就需要添加绝对路径或者是相对路径

最后,我们编写main.cpp函数
QtCreator创建使用dll

运行,得出正确答案!



PS:如果在运行的时候,控制台提示异常退出。
那么最有可能的是你的dll文件并不是放在代码的根目录下,那么我们需要把dll复制到根目录下或者是生成exe的debug或者release目录下再运行即可。
0 0
原创粉丝点击