DLL和进程的地址空间

 

 

    创建D L L常常比创建应用程序更容易,因为D L L一般只包含独立存在的函数,这些函数可以很容易的被其他的应用程序所调用

 

。D L L中通常不支持消息循环的处理或者窗口的创建。

    D L L只是一组源代码模块,每个模块包含了应用程序(可执行文件)或另一个D L L将要调用的一组函数。当所有源代码文件编

 

译后,它们就像应用程序的可执行文件那样被链接程序所链接。但是,对于一个D L L来说,你必须设定linker程序的/ D L L开关。

 

这个开关使得链接程序能够向产生的D L L文件映像插入一些dll相关标识的信息,这样,操作系统加载程序就能将该文件映像视为一

 

个D L L而不是应用程序。

    在应用程序(或另一个D L L)能够调用D L L中的函数之前,D L L文件映像必须被映射到调用进程的地址空间中。若要进行这

 

项操作,可以使用两种方法中的一种,即加载时的隐含链接(编译期加载)或运行期的显式链接(运行期加载)。编译期加载和运行期

 

加载都很有用处。

    一旦D L L的文件映像被映射到调用进程的地址空间中, D L L的函数就可以供进程中运行的所有线程使用。实际上, D L L几

 

乎将丢失掉它作为D L L的全部特征。 对于进程中的线程来说,D L L的代码和数据看上去就像恰巧是在进程的地址空间中的额外代

 

码和数据一样。此时DLL可以退化为它可以导出的函数集合了。

 

    当一个线程调用D L L函数时,该D L L函数使用的是线程的堆栈,参数的传递,任何局部变量的产生,使用的都是线程的堆栈。

 

DLL没有他自己的堆栈,切忌!!

    此外, D L L中函数的代码创建的任何对象均由调用线程所拥有,而D L L本身从来不拥有任何东西。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值