图解如何使用VS2010和Qt导出和使用静态库,动态库
来源:互联网 发布:中世纪2优化9经验 编辑:程序博客网 时间:2024/05/16 02:22
首先使用VS2010来导出一个DLL,该DLL种含有一个类,新建项目,如下图
然后看资源管理器,在DLL导出类中添加要导出的函数或者类
编辑要导出的类或者函数,如下:
编译后生成DLL,名字就是工程名 “ClassDll.dll”
然后新建一个工程,调用该dll,代码如下:
- #include<iostream>
- using namespace std;
- #include<Windows.h>
- typedef int(*MYPROC)(int,int);
- void main()
- {
- MYPROC pFunc;
- HMODULE hdll_lib=::LoadLibraryEx(TEXT(“ClassDll.dll”),NULL,0);
- if(hdll_lib==NULL)
- {
- cout<<“call dll function error”<<endl;
- FreeLibrary(hdll_lib);
- return;
- }
- pFunc=(MYPROC)GetProcAddress(hdll_lib,”SubFunc”);
- if(pFunc)
- {
- int a=pFunc(3,2);
- cout<<“call dll successed! 3-2=”<<a<<endl;
- FreeLibrary(hdll_lib);
- return;
- }
- else
- {
- cout<<“pFunc error!”<<endl;
- }
- }
当然,如果是给别人用的话,要提供给他一个头文件
extern “C”是导出标准的C程序代码
也许你并不满足于导出一个函数,你也许想导出一个类,这样更方便,下面来讲解怎么样导出一个类
第一步 还是一样的,创建工程,将要导出的类如下写
然后你需要的是给调用者提供一个头文件,非常简单如下
然后把ClassDll.dll和ClassDll.lib文件拷贝到工程目录下面,在main.cpp中加上这样一句预处理
#pragma comment(lib,”ClassDll.lib”)
lib文件时dll文件的入口导入文件
main函数如下
- #include<iostream>
- using namespace std;
- #include<Windows.h>
- #include”ClassDll.h”
- typedef int(*MYPROC)(int,int);
- #pragma comment(lib,”ClassDll.lib”)
- void main()
- {
- MYPROC pFunc;
- HMODULE hdll_lib=::LoadLibraryEx(TEXT(“ClassDll.dll”),NULL,0);
- if(hdll_lib==NULL)
- {
- cout<<“call dll function error”<<endl;
- FreeLibrary(hdll_lib);
- return;
- }
- pFunc=(MYPROC)GetProcAddress(hdll_lib,”SubFunc”);
- if(pFunc)
- {
- int a=pFunc(3,2);
- cout<<“call dll successed! 3-2=”<<a<<endl;
- FreeLibrary(hdll_lib);
- }
- else
- {
- cout<<“pFunc error!”<<endl;
- }
- DllClass dllClass;
- int res=dllClass.AddFunction(2,3);
- cout<<“调用导出类 2+3=”<<res<<endl;
- }
这是创建动态链接库的方法,创建静态链接库的方法是大同小异,省略。。。
下面说QT来创建和调用DLL或者静态链接库.a文件的方法,我想要比VS方便多了
创建导出类的DLL
第一步,创建工程
点击choose后,出现如下
然后看看它的.pro文件,如下
然后直接编辑类对应的.h和.cpp文件就OK了,我们创建导出类,叫MyShareLibrary,他有一个简单的函数,如下
编译就可以创建出dll,但是没有创建出来.lib文件,相反创建了一个.a文件,不过在QT里面调用dll方便的多,不用那么复杂,首先来调用一个导出的类
创建一个工程,在他的.pro工程文件中添加它所要调用的dll,如下
为他提供一个类的头文件,然后再要调用的地方如下调用
如果要在QT中调用一个导出的C函数呢,那么我们可以使用QLibrary类来完成,如下,我们来调用在VS中创建的导出C函数SubFunc(int,int)
- QLibrary library(“ClassDll”);
- if(!library.load())
- return -1;
- typedef int(*pFunc)(int,int);
- pFunc function=(pFunc)library.resolve(“SubFunc”);
- if(function)
- {
- res=function(4,3);
- qDebug()<<“4-3=”<<res;
- }
如果要创建静态链接库,那么就在创建工程时候选择static library,他的工程文件有点不同
如下
划线那条是我最后加上去的,这样也可以同时生成dll文件,而当我们使用.a静态链接库的时候,就要在.pro文件中添加上它要链接的库文件,加上如下这句
好了,差不多写到这里!
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 使用vs2010生成和使用动态库和静态库
- VS2010编写静态库和如何使用静态库
- qt 静态库 动态库 elf 生成和使用
- Qt动态库和静态库的加载及使用
- 使用Qt创建动态和静态链接库
- vs2010 如何让创建和使用动态链接库(dll)
- QT静态库和动态库的导出
- VS2010 静态库生成和使用
- VS2010如何创建静态链接库和动态链接库
- VS2010下静态链接库和动态链接库的生成和使用
- 【Qt】Qt动态库和静态库的创建和使用
- VS2010使用静态编译的qt库
- Ubuntud 下不可挂载Windows 分区的解决方法
- 基于点阵字库的汉字显示
- POJ3411 Paid Roads 解题报告
- 内部命令VS外部命令
- 导入导出oracle字符集问题——NLS_LANG 参数
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 转:Linux命令英文对照表
- java反射的应用
- V4L2框架分析学习
- mysql 事务
- Hibernate4.3.8 buildSessionFactory过时解决方案HibernateUtil
- 关于HBASE过滤器的一些基本实例
- (转AS3)利用BitmapData.draw对位图进行翻转缩放操作
- Makefile 中:= ?= += =的区别