1.静态库不需要main函数,要想生成lib,要修改属性à常规à配置类型à改成dll
2.静态库中的头文件只是说明,是给程序员看的,其实lib里面已经有了接口。
3.链接lib的时候程序的体积就变大了。
4.静态库更新的时候,需要重新生成,然后调用
5.动态库调用就不用重新生成。
6.动态库的调用代码:(使用的是HMODULELoadLibraryA的方式进行调用)
接口
7.编写的动态库如下:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
//导出函数,可以加载的时候调用
_declspec(dllexport)
void
msg()
{
MessageBoxA(0, "1",
"2", 0);
}
//导出函数,可以加载的时候调用
_declspec(dllexport)
int
add(int
a,
int
b)
{
return
a +
b;
}
8.动态库调用代码:
#include
<stdio.h>
#include<stdlib.h>
#include<Windows.h>
typedef
void(*pmsg)();//简化函数指针
typedef
int(*padd)(int
a,
int
b);//简化函数指针
void
main()
{
HMODULE
mydll =
LoadLibraryA("动态库.dll");
if (mydll
== NULL)
{
printf("动态库加载失败");
}
else
{
pmsg
pmsg1;
//定义一个函数指针,msg为函数名
//获取函数地址
pmsg1 = (pmsg)GetProcAddress(mydll,"msg");
if (pmsg1
!= NULL)
{
pmsg1();//执行
}
padd
padd1;//定义函数指针
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.