windows下动态链接库(讲解)

动态链接在Linux下是.o文件,在windows就是dll文件。一些常用的dll库一般放在C:\WINDOWS\system32下,如果想注册一个dll可以拷贝一份,然后regsvr32命令注册一份。注册时候要注意dll所在目录是不可以有中文的,如果dll错误,那么有两种情况,版本不对和dll文件缺失。

微软的Visual C++支持三种DLL,它们分别是Non-MFC Dll(非MFC动态库)、Regular Dll(常规DLL)、Extension Dll(扩展DLL)。Non-MFC DLL指的是不用MFC的类库结构,直接用C语言写的DLL,其导出的函数是标准的C接口,能被非MFC或MFC编写的应用程序所调用。Regular DLL和的Extension Dlls一样,是用MFC类库编写的。
我们已经知道DLL是包含若干个函数的库文件,应用程序使用DLL中的函数之前,应该先导出这些函数,以便供给应用程序使用。要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),另外一种方法是在创建DLL文件时使用模块定义文件.Def。需要注意的是在使用第一种方法的时候,不能使用DEF文件。

应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。

1.隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了。
//Dlltest.h  
#pragma comment(lib,"MyDll.lib")  
extern "C"_declspec(dllimport) int Max(int a,int b);  
extern "C"_declspec(dllimport) int Min(int a,int b);  
//TestDll.cpp  
#include  
#include"Dlltest.h"  
void main()  
{int a;  
a=min(8,10)  
printf("比较的结果为%d ",a);  
}  

2.显式链接
  显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。不过实现显式链接要麻烦一些。在应用程序中用LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddress()获取想要引入的函数。自此,你就可以象使用如同在应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用FreeLibrary或MFC提供的AfxFreeLibrary释放动态链接库。

void main(void)  
{  
typedef int(*pMax)(int a,int b);  
typedef int(*pMin)(int a,int b);  
HINSTANCE hDLL;  
PMax Max  
HDLL=LoadLibrary("MyDll.dll");//加载动态链接库MyDll.dll文件;  
Max=(pMax)GetProcAddress(hDLL,"Max");  
A=Max(5,8);  
Printf("比较的结果为%d ",a);  
FreeLibrary(hDLL);//卸载MyDll.dll文件;  
}  


lib引用:
在VC的tools->options->directories里面的Library files添加目录
在project->settings->link的library modules加上ace.lib
在头文件中加上#pragma comment(lib, "ace.lib")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值