关于动态库和静态库的问题

关于静态库的使用

静态库不需要main函数,其他函数的定义也没有太大的区别,需要设置项目属性中的:

 

生产一个xxx.lib的文件

关于静态库的使用

新建一个项目,然后将xxx.lib文件拷贝过来,放在这个工程文件和main.c文件放在一起,

在main.c中需要应用这个xxx.lib

Eg:

//不需要  分号;库必须复制过去到这个工程文件和main.c同样目录下面

#pragma comment(lib,"进制.lib")

如果xxx.lib工程中.c文件对应的头文件.h,则最好在也把.h文件也引用:#include “xxx.h”

这样就可以,对于xxx.lib里面函数的引用和普通函数应用一样。直接调用函数名。

关于动态库的使用

1.       动态库也是不要main函数的,单数里面的函数的定义是需要这样定义:

Eg:

_declspec (dllexport)  void msg()

{

 

        

       MessageBoxA(0, "11", "222",0);

}

//函数头需要 _declspec (dllexport)

 

生产项目后(也要注意设置项目属性中的),

得到xx.dll文件,将xx.dll拷贝到需要用他的项目中,和main文件在一个文件夹中;

 

2.       在main项目中

typedef void(*pMsg)();//声明函数指针pmsg;将函数名换成 (*p);加上括号!

typedef int(*pAdd)(int a, int b);//定义和简化函数指针

 

void main()

{

       HMODULE myDll = LoadLibraryA("动态库.dll");

       if(myDll == NULL)

       {

              printf("加在DLL失败");

       }

       else

       {

              pMsg  pmsg1;//定义一个函数指针

              pmsg1= (pMsg)GetProcAddress(myDll, "msg");//获取函数地址

              if(pmsg1 != NULL)

              {

                     pmsg1();

              }

       }

       pAddpadd1;

       padd1= (pAdd)GetProcAddress(myDll, "add");

       if(padd1 != NULL)

       {

              printf("\n%d",padd1(12, 3));

       }

 

       FreeLibrary(myDll);

       system("pause");

}

 

首先先定义简化dll中的函数名,

然后将dll库加载到该文件中,前提是在文件夹里面已经放置了xx.dll文件,然后,添加:HMODULEmyDll = LoadLibraryA("动态库.dll");

然后获得需要用到dll中某个函数的地址,通过GetProcAddress这个函数

pMsg  pmsg1;//定义一个函数指针

              pmsg1 =(pMsg)GetProcAddress(myDll, "msg");

最后在用完这个dll后,要释放他;则调用方法:

FreeLibrary(myDll);

 

关于动态库和静态库的区别

3.       动态库:

谁都可以用,不用跟新exe,更新dll,可以实现功能的更新,节约计算机资源,需要使用的时候,调用,否则释放,此外,很多做坏事的都是操作dll,可以实现劫持!在程序员的工作中,很多都是做dll。

 

4.       静态库:

a)       可以实现私有化,每次更新,需要重新编译exe,浪费资源。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值