最近项目开发中碰到的,没有找到微软相关的document,不知道是不是未存档的,所以在这里说一下。
情况是这样的,有一堆dll放在目录A,另外一个exe程序放在目录B。目录A当中dll有些是clr支持的,有些是纯win32的。这些win32 dll之间通过隐式调用(.h头文件&.lib文件)时一切正常,但是如果是通过LoadLibrary或者相关的函数显式调用则必须指定dll文件的完整路径,否则尽管它们都在同一个目录A中,运行时系统也只会去搜索exe所在的目录B,因为在目录B中找不到指定文件名的dll将发生系统错误。解决方法最简单的就是利用SetDllDirectory函数动态的添加目录A到系统搜索目录中。
另外,经过实验,.NET 3.5(VS2008Beta2)中ms已经解决了这个问题,将caller dll所在目录默认已经加入到了callee dll的搜索路径中,这样直接就可以通过文件名调用了。