静态加载的DLL文件 必须与exe放在同一个目录下吗。我有两个不同的工程调用的是同一个版本的dll,但是两个工程exe在不同的目录中,并且这两个目录中都有各自的dll,
但是发现一个exe运行后,再运行另一个exe,调用的dll是刚运行的那个exe目录下的dll,不是它自己目录下的exe。求解

解决方案 »

  1.   

    在搜索路径下能找到就可以但是发现一个exe运行后,再运行另一个exe,调用的dll是刚运行的那个exe目录下的dll,不是它自己目录下的exe
    没改变当前目录
      

  2.   

    说错了 其实不是exe 也是网页用的dll,  即一个网页DLL A调用了另外一个DLL C  ,这时再开一个网页B  发现调用的是A目录下的C不是B目录下的C
      

  3.   

    可以通过设置环境变量来使用指定目录下的DLL
      

  4.   


    这个我知道,我想搞清楚,现在错误调用的原因,静态加载的方式不是只调用所在目录下的DLL么
      

  5.   

    启动一个进程的时候,操作系统的加载程序会将DLL模块映射到进程的地址空间中,但是加载程序会对载入的DLL模块进行记录,即使多个进程用到了同一个DLL模块,该DLL模块也只会被载入和映射一次,所以你这调用的就是同一个DLL
      

  6.   

    不是的,静态调用DLL的话,它有一定的搜索顺序。一般是按如下顺序去找:
    1、程序载入的目录.  
    2、当前目录. 
    3、system目录. 使用GetSystemDirectory 函数获取这个目录路径. 
    4、16-bit system目录. 没有函数获取这个目录,但属于DLL搜索范围. 
    5、Windows目录. 使用GetWindowsDirectory函数可以获取该目录路径. 
    6、PATH 环境变量设置的目录列表.   
      

  7.   

    静态调用dll,按如下顺序搜索:
    1、The directory containing the EXE file.
    2、The process's current directory.
    3、The Windows system directory.
    4、The Windows directory.
    5、The directories listed in the Path environment variable.
    楼主描述的情况,应该是列表中第2种:The process's current directory.
    即搜索到当前进程目录下的dll。
      

  8.   

    按楼主的意思是说已经加载过的DLL是不会重复加载了?
    楼主直接就说出结论了,加以肯定就是了嘛
      

  9.   

    项目属性-->配置属性-->VC++项目
    这里可以配置有关目录路径