动态链接库全面浅析(一)-----Win32 动态链接库

本文是关于Win32动态链接库的浅析,介绍了动态链接库的基础知识,包括其优点、导出接口的方式、调用方法、名称修饰规则及DllMain。文章分为四个部分展开,此为第一部分,主要探讨了动态链接库的基本概念和导出导入方法。
摘要由CSDN通过智能技术生成

言前:由于最近复习了下动态链接库,所以决定写一个动态链接库专题。动态链接库网上各种达人已近写过很多了,资料也是一大把一大把的。但是我还是想写一份,因为网上讲的都很分散,讲的不是很系统,而且很多问题没有深究。因此我自己还是写一份吧,因为说明了是浅析。所以说我不可能讲的太深入,但是本文还是立足于有一定动态链接库编程基础的读者。 动态链接库专题我准备分为4篇文章来介绍 1.Win32 动态链接库 2.MFC常规动态链接库 3.MFC扩展动态链接库 4.各种链接库总结对比


好吧,现在就开始Win32 动态链接库编程吧。首先还是简单的介绍下基本知识(由于本人比较懒,所以只是大概提一下基本知识,这点上不会很全面,但是本人还是强烈建议大家,还是首先在网上系统的学习一下动态链接库的最基本知识。如动态链接库在内存上的映射方式,查看动态链接库的导入导出啊等等之类的最最最基本的知识)

基础知识:

1.动态链接库有很多的优点:如隐藏实现细节,实现代码共享,便于升级产品,可以在不同语言之间交互等等。

2.我们在编写好了动态链接库以后,我们必须导出我们留给用户使用的接口,然后用户在自己的程序里导入这些接口以便自己使用。导出的方式会有两种,一种是使用dllimport/dllexport ,还有一种是使用def 模块定义文件来导出,在后面我们会详细全面的介绍这种到出方法

3.调用:一共有两种调用动态链接库的方方式

动态调用:在程序中使用 LoadLibrary()/FreeLibrary() 动态的获得函数,类成员变量的指针。然后通过指针调用函数/成员函数。这种方法比较适合大型项目中使用,用户在我们要使用动态链接库的时候才去加载,使用完了以后就释放掉,这样对内存的利用效率还是比较高的。

静态调用:使用#pragma comment(lib,"XXXX.lib")或在编译器中设置,相关选项,来使用动态链接库,这种方式比较方便,不用我们显示的加载和释放动态链接库。程序在运行时会自动的去加载我们制定的动态链接库。在这种情况下我们可以用dumpbin 的imports 命令来查看到导入的动态链接库的接口。如果是动态调用的话,我们是无法查看到我们自己导出的动态链接库的imports信息的哦

  动态链接库调用路径

  1. 程序载入的目录.
  2. 当前目录.
  3. system目录. 使用GetSystemDirectory 函数获取这个目录路径.
  4. Windows目录. 使用GetWindowsDirectory函数可以获取该目录路径.
  5. PATH 环境变量设置的目录列表

4.我们导出的动态链接库通常,编译器在编译的时候通常都会给我们的函数修改名称这导致了,导出的函数的名称相应的发生了改变。下面便是编译器改名的具体规则。

 对于C语言编译器

对于__stdcall调用约定,编译器和链接器会在输出函数名前加上一个下划线前缀,函数名后面加上一个“@”符号和其参数的字节数,例如_functionname@number。__cdecl调用约定仅在输出函数名前加上一个下划线前缀,例如_functionname。__fastcal

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值