DLL使用方法入门
来源:互联网 发布:大盘指数算法 编辑:程序博客网 时间:2024/06/04 18:22
1.DLL(冒泡算法)
复制代码
extern "C"_declspec(dllexport) void maopao(int *p,int count);
void maopao(int *p,int count)
{ int temp=0;
for(int i=1;i<count;i++)
{for(int j=count-1;j>=i;j--)
{ if(p[j]>p[j-1])
{temp=p[j];
p[j]=p[j-1];
p[j-1]=temp;
}
}
}
}
复制代码
2.调用DLL
复制代码
#include<iostream>
#include<Windows.h>
#include<time.h>
typedef int(*Dllfun)(int *,int);
using namespace std;
int main()
{ Dllfun maopao1;
HINSTANCE hdll;
hdll=LoadLibrary("D:\\net源码\\maopaoa_dll\\Debug\\maopaoa_dll.dll");
if(hdll==NULL)
{FreeLibrary(hdll);
}
maopao1=(Dllfun)GetProcAddress(hdll,"maopao");
if(maopao1==NULL)
{FreeLibrary(hdll);
}
int a[10];
srand(time(0));
for(int i=0;i<10;i++)
a[i]=rand()%50;
maopao1(a,10);
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
FreeLibrary(hdll);
}
复制代码
C++如何调用DLL呢,有两种,一种是静态,另外一种是动态,即通过调用windowsAPI 来加载和卸载DLL,具体思路:
1.先编写一个DLL,我这里是直接在CPP里编写了函数声明和定义,没有单独的头文件,因为很多情况下的DLL都是没有和lib和头文件一起的。
2.然后另外新建一个项目,来调用DLL,方法是:
1.声明头文件<windows.h>,说明我想用windows32方法来加载和卸载DLL
2.然后用typedef定义一个指针函数类型.typedef void(*fun) //这个指针类型,要和你调用的函数类型和参数保持一致,记住,是指针参数就是(int *,int)
3.定一个句柄实例,用来取DLL的实例地址。HINSTANCE hdll;
格式为hdll=LoadLibrary(“DLL地址”);这里字符串类型是LPSTR,当是unicode字符集的时候会不行,因此要在配置-属性-常规里面把默认字符集“unicode”改成支持多字符扩展即可。
4.取的地址要判断,返回的句柄是否为空,如果为无效句柄,那么要释放加载DLL所占用的内存。
FreeLibrary(hdll);
5.然后定义一个函数指针,用来获取你要用的函数地址,这个咋用呢?
先是定一个函数指针 fun FUN;然后通过GetProcAdress来获取函数的地址,这个函数参数是什么呢?
参数是DLL的句柄和你要调用的函数名:比如:FUN=(fun)GetProcAdress(hdll,"sum");
这里也要判断要函数指针是否为空,如果没取到要求的函数,那么要释放句柄
FreeLibrary(hdll);
6.然后通过函数指针来调用函数。
FUN(int *p,int count);这里不能用函数名来使用函数,因为这个DLL本身不是当前CPP的一部分,而是通过windows去调用.没有在这个工程里声明或者定义,而是暴露出一个头,要指针获取他的地址,通过指针来调用.
最后调用结束后,就释放句柄
FreeLibrary(hdll);
这里只是通过动态加载没有涉及到静态的。这个在后续会学习。
阅读全文
1 0
- DLL使用方法入门
- DLL使用方法
- DLL入门
- DLL入门
- DLL入门
- URLRewriter.dll的使用方法
- Newtonsoft.Json.dll使用方法
- dll使用方法(转)
- DLL创建及使用方法
- ICSharpCode.SharpZipLib.dll 使用方法
- Ajax.dll的使用方法
- 自定义dll文件的使用方法
- 自定义dll文件的使用方法
- SxsTrace工具使用方法 MSVCP100.dll
- C#编程->FreeImage.dll使用方法
- JSON 入门使用方法
- 示波器入门使用方法
- CMake的使用方法入门
- css3 transition 动画
- 超好用的 Linux 文件管理器推荐
- 《代码整洁之道》读书笔记
- Yii2文件上传
- 时钟源关系初解
- DLL使用方法入门
- Mac下安装Scala,sbt和Spark
- 安卓常用工具类
- 22个免费的数据可视化和分析工具推荐
- Genymotion错误:An error occured while deploying the file.
- JS-----------------进度条
- XXX网址
- Java EE开发第十一章:3.servlet的体系结构以及常用方法
- 当你在浏览器中输入 google.com 并且按下回车之后发生了什么?