首页 > 代码库 > 动态库和静态库
动态库和静态库
1.静态库不需要main函数,要想生成lib,要修改属性à常规à配置类型à改成dll
2.静态库中的头文件只是说明,是给程序员看的,其实lib里面已经有了接口。
3.链接lib的时候程序的体积就变大了。
4.静态库更新的时候,需要重新生成,然后调用
5.动态库调用就不用重新生成。
6.动态库的调用代码:(使用的是HMODULELoadLibraryA的方式进行调用)
接口
7.编写的动态库如下:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
//导出函数,可以加载的时候调用
_declspec(dllexport)voidmsg()
{
MessageBoxA(0, "1","2", 0);
}
//导出函数,可以加载的时候调用
_declspec(dllexport)int add(inta,intb)
{
returna +b;
}
8.动态库调用代码:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
typedefvoid(*pmsg)();//简化函数指针
typedefint(*padd)(inta,intb);//简化函数指针
voidmain()
{
HMODULEmydll =LoadLibraryA("动态库.dll");
if (mydll == NULL)
{
printf("动态库加载失败");
}
else
{
pmsgpmsg1; //定义一个函数指针,msg为函数名
//获取函数地址
pmsg1 = (pmsg)GetProcAddress(mydll,"msg");
if (pmsg1 != NULL)
{
pmsg1();//执行
}
paddpadd1;//定义函数指针
padd1 = (padd)GetProcAddress(mydll,"add");
if (padd1 != NULL)
{
printf("\n%d",padd1(10,29));
}
}
//如果调用下面的代码之后就可以发现在程序里面没有"动态库.dll"了
FreeLibrary(mydll);
system("pause");
}
9.动态库和静态库的比较
dll(动态库)
谁都可以用,不用更新exe,更新dll即可,可以实现功能更新,节省计算机资源,需要使用的时候调用,否则释放。
lib(静态库)
可以实现库文件的私有,每次更新,需要重新编译exe.