!= 函数调用 img clas 处理 dllexport void 再看
1. 静态库使用比较简单,就两步
@1 包含静态库头文件 #include "文件名"
@2 预处理加载静态库 #pragma comment(lib," 库文件名 ")
2. 再看动态库
@1 首先得有动态库文件,将动态库文件放在源码目录 (不然后面加载得传入文件路径),这是我的动态库源文件内容
- 1#include
- 2#include
- 3#include
- 4
- 5 //导出函数,加载的使用可以使用
- 6_declspec(dllexport)void popWindow()
- 7 {
- 8MessageBoxA(0,"你好,世界","唐嫣",1);
- 9 }
- 10
- 11_declspec(dllexport)intadd(inta,int b)
- 12 {
- 13 returna + b;
- 14}
@2 包含 windows 头文件 #include<windows.h>
- #include
- #include
- #include
@3 声明指向要调用的函数的函数指针
// 定义函数指针来调用动态库,typedef 简化函数指针类型定义 typedef void(*ppop)();typedef int(*padd)(int, int);
@4 加载动态库
HMODULE mydll = LoadLibraryA("动态库. dll");
@5 调用动态库模块函数
ppop pw;// 定义弹窗函数指针 pw = (ppop)GetProcAddress(mydll,"popWindow");// 获得动态库文件的模块(函数)的入口地址
3. 下面是调用动态库文件的全部源码
- 1#include
- 2#include
- 3#include
- 4
- 5 //定义函数指针来调用动态库,typedef简化函数指针类型定义
- 6typedefvoid(*ppop)();
- 7typedefint(*padd)(int,int);
- 8
- 9
- 10 void main()
- 11 {
- 12HMODULE mydll = LoadLibraryA("动态库.dll");
- 13 if(mydll == NULL)
- 14 {
- 15printf("动态库加载失败");
- 16 }
- 17 else
- 18 {
- 19 //弹窗函数调用
- 20ppop pw;//定义弹窗函数指针
- 21pw = (ppop)GetProcAddress(mydll,"popWindow");//获得动态库文件的模块(函数)的入口地址
- 22 if(pw != NULL)
- 23 {
- 24pw();//调用
- 25 }
- 26
- 27 //求和函数调用
- 28 padd pa;
- 29pa = (padd)GetProcAddress(mydll,"add");
- 30 if(pa != NULL)
- 31 {
- 32 intm = pa(13,16);
- 33printf("%d\n", m);
- 34 }
- 35
- 36 }
- 37}
4. 查看运行结果, 可见调用成功。
静态库和动态库的使用
来源: http://www.bubuko.com/infodetail-2094328.html