好久没上来透气了(快一年了吧),好想念csdn里的大侠们啊!先祝大家新年快乐!
大家都知道,动态连接库DLL技术是Windows程序开发的一个重要的途径,包括ATL,ActiveX/.com,.net,实际都是该技术的衍生,它突出了动态分配的这么一个核心理念,是Wintel这一廉价体系中必然采取的措施!(否则,Intel发不了,Micro也发不了;这两个不要脸的)
Windows中提供了一些加载DLL的API,如Loadlibrary,SaveLoadlibrary等等,这里我就不再详细叙述了,我现在的问题是:
当程序使用这些API加载了某个DLL(在内存中),这时发生了该DLL的磁盘的 replace,那么,replace能成功吗?
如果我没有记错的话,我曾经遇到过两种情况:一种是,windows系统中的某些dll是不能直接replace的,会提示“该文件正在使用中”;另一种是可以replace的,包括我自己写程序做实验的时候。
请大侠们提点一二,小弟有点困惑!

解决方案 »

  1.   

    是么?我倒没试过,但一般来说在没有释放 library 之前应该是不能删除相关dll的。
    留意。
      

  2.   

    DLL被调用的时候,并不重新启动一个实例(除非第1次),而是通过内存映射,把DLL的内容映射到当前应用程序的内存中,并把记数器+1,卸载时记数器-1,0时从内存中删除映像.(是否通过内存映射我不是很肯定,因为内存映射一样耗费内存,但从我自己的分析来看应该是这样的)理论上来说,每个合法DLL都可以被同时多次的调用.如果只能被某个EXE调用或不能被重复调用,也很正常,只要在DLL的初始代码加几句判断代码.当然它们也是合法的DLL.