动态库DLL文件的动态调用和静态调用

参考百度百科和C++调用DLL有两种方法—静态调用&动态调用
库文件一般指计算机上的一类文件,分两种,一种是静态库,另一种是动态库即DLL(Dynamic Link Library)文件,又叫动态链接库文件。静态库和动态库的区别是:静态库在程序的链接阶段被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,因此节省了很多内存,而且使用动态库也便于模块化更新程序。

一、DLL意义

DLL文件中存放的是各类程序的函数(子过程)实现过程,当程序需要调用函数时需要先载入DLL,然后取得函数的地址,最后进行调用。使用DLL文件的好处是程序不需要在运行之初加载所有代码,只有在程序需要某个函数的时候才从DLL中取出。另外,使用DLL文件还可以减小程序的体积。

二、DLL调用方式
(1) 静态调用

步骤如下:
1、把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下;
2、把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下;
3、把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目录下;
4、打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单;
5、执行第4步后,VC将会弹出一个对话框,在对话框的多页显示控件中选择Link页。然后在Object/library modules输入框输入:youApp.lib
6、选择你的目标工程Head Files加入:youApp.h文件;
7、最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include “youApp.h”
注:youApp是你DLL的工程名。

.lib是一种文件名后缀,代表的是静态数据连接库,在windows操作系统中起到链接程序和函数(或子过程)的作用,相当于Linux中的.a或.o、.so文件。
LIB文件中存放的是函数调用的信息,数据库有静态数据库(.lib文件)和动态数据库(.dll文件)
一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就要连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件静态编译出来的,索引和实现都在其中。

(2) 动态调用
是由编程者用 API 函数加载和卸载 DLL 来达到调用 DLL 的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。
1、把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下;
2.、在程序中使用以下代码

{
    HINSTANCE hDllInst = LoadLibrary(“youApp.DLL”);
    if(hDllInst)
    {
        typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);
        MYFUNC youFuntionNameAlias = NULL; // youFuntionNameAlias 函数别名
        youFuntionNameAlias = (MYFUNC)GetProcAddress
        (hDllInst,”youFuntionName”);
        // youFuntionName 在DLL中声明的函数名
        if(youFuntionNameAlias)
        {
            youFuntionNameAlias(param1,param2);
        }
        FreeLibrary(hDllInst);
     }
}

在Windows系统中,与动态库调用有关的函数包括:
①LoadLibrary(或MFC 的AfxLoadLibrary),装载动态库。
②GetProcAddress,获取要引入的函数,将符号名或标识号转换为DLL内部地址。
③FreeLibrary(或MFC的AfxFreeLibrary),释放动态链接库。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值