DLL-使用DLL

动态链接库的使用

fangyukuan

2010.6.21

应用程序可以调用的DLL函数,在DLL中叫做导出函数,而在应用程序中叫做导入函数。应用程序中的导入函数与DLL文件中的导出函数进行链接有两种方式:隐式链接显式链接

一、隐式链接

在建立一个DLL文件时,编译器会自动生成一个与该文件对应的导入库文件(扩展名为lib)。该文件包含了DLL中所有导出函数所有DLL库的名称,应用程序可以根据这个文件来寻找并加载DLL。由于在程序中没有出现加载DLL的代码,所以把这种链接方式叫做隐式链接。

 

Windows搜索DLL的顺序为:

 

1.         包含应用程序EXE文件的目录。

2.         进程的当前工作目录。

3.         Windows系统目录。

4.         Windows目录。

5.         列在Path环境变量中的一系列目录。

 

例子:

声明导入函数。

#include "stdafx.h"

void SayHello(void);

 

int _tmain(int argc, _TCHAR* argv[])

{

    SayHello();

    return 0;

}

另外在工程设置好lib的路径。

2010062103113992.png2010062103114889.png

如果没有设置好,将连接不过。如下:

>Linking...

1>2_DLLDemoCall.obj : error LNK2019: unresolved external symbol "void __cdecl SayHello(void)" (?SayHello@@YAXXZ) referenced in function _wmain

二、显式链接

例子见:http://www.cnblogs.com/fangyukuan/archive/2010/06/20/1761464.html

如果在应用程序中使用Windows API函数直接完成DLL库函数的调用,那么这种做法就叫做DLL的显式方式,当然这不必使用导入库文件了。

方法如下:

 

1获得DLL

通过调用Win32LoadLibrary 函数,并以要使用的DLL文件所在的路径为参数,可以取得DLLLoadLibaray函数的原型如下:

HINSTANCE LoadLibrary(

  LPCTSTR lpLibFileName   // DDL的路径

);

 

函数的返回值为DLL库的句柄。

.获得DLL函数

获得了DLL的句柄之后,接下来就可以在应用程序中通过调用Win32 API函数GetProcAddress来获得该DLL中与导入函数相匹配的导出函数了。原型如下:

FARPROC GetProcAddress(

  HMODULE hModule,    // handle to DLL module DLL的句柄

  LPCSTR lpProcName   // name of function 导入函数的名称

);

GetProcAddress函数的返回值为DLL导出函数地址。

 

3释放DLL

在使用完DLL之后,必须用FreeLibrary函数来释放动态链接库。原型如下:

BOOL FreeLibrary(

  HMODULE hLibModule   // handle to loaded library module DLL句柄

);

 

采用显式链接方式调用DLL库,程序员可以决定加载哪个DLL文件,这使得程序的设计更为灵活。

 本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/06/21/1761666.html

 

 

转载于:https://www.cnblogs.com/fangyukuan/archive/2010/06/21/1761666.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值