1.静态库使用比较简单,就两步
@1包含静态库头文件#include "文件名"
@2预处理加载静态库 #pragma comment(lib,"库文件名")
2.再看动态库
@1首先得有动态库文件,将动态库文件放在源码目录(不然后面加载得传入文件路径),这是我的动态库源文件内容
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<windows.h> 4 5 //导出函数,加载的使用可以使用 6 _declspec(dllexport) void popWindow() 7 { 8 MessageBoxA(0, "你好,世界", "唐嫣", 1); 9 } 10 11 _declspec(dllexport) int add(int a, int b) 12 { 13 return a + b; 14 }
@2包含windows头文件#include<windows.h>
#include<stdio.h> #include<stdlib.h> #include<windows.h>
@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<stdio.h> 2 #include<stdlib.h> 3 #include<windows.h> 4 5 //定义函数指针来调用动态库,typedef简化函数指针类型定义 6 typedef void(*ppop)(); 7 typedef int(*padd)(int, int); 8 9 10 void main() 11 { 12 HMODULE mydll = LoadLibraryA("动态库.dll"); 13 if (mydll == NULL) 14 { 15 printf("动态库加载失败"); 16 } 17 else 18 { 19 //弹窗函数调用 20 ppop pw;//定义弹窗函数指针 21 pw = (ppop)GetProcAddress(mydll, "popWindow");//获得动态库文件的模块(函数)的入口地址 22 if (pw != NULL) 23 { 24 pw();//调用 25 } 26 27 //求和函数调用 28 padd pa; 29 pa = (padd)GetProcAddress(mydll, "add"); 30 if (pa != NULL) 31 { 32 int m = pa(13, 16); 33 printf("%d\n", m); 34 } 35 36 } 37 }
4.查看运行结果,可见调用成功。
需要程序源码的可以加我微信x241602私聊。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?