首页 > 代码库 > 动态库和静态库

动态库和静态库



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.