[英]Infernal Libraries (aka DLL Hell)
在我的一个项目中,我使用一个Delphi应用程序,它动态加载一个包装DLL(导出C-Style函数),后者又与一堆第三方DLL静态链接。
它在我的测试机器上工作正常,但在我的客户计算机上它无法初始化时出现错误消息“无法在TMYlibrary.dll中找到入口点_somefunction @ 4AKKZ”。
在使用sysinternal的进程监视器进行一些调查后,我意识到Windows首先会在windows / sytem32中看到DLL,所以如果在system32中出现类似于我的 DLL的DLL,那么windows会选择那个并尝试找到我的函数入口点。它 - 会失败。
你知道改变windows的DLL搜索行为的可能吗?
附加信息
我自己找到了另一种方法:
SetDllDirectory
将额外的搜索路径添加到要查看的位置列表中。
来自http://msdn.microsoft.com/en-us/library/ms686203%28v=VS.85%29.aspx
调用SetDllDirectory后,DLL搜索路径为:
- 加载应用程序的目录。
- lpPathName参数指定的目录。
- 系统目录。 使用GetSystemDirectory函数获取此目录的路径。 该目录的名称是System32。
- 16位系统目录。 没有函数可以获取此目录的路径,但会搜索它。 该目录的名称是System。
- Windows目录。 使用GetWindowsDirectory函数获取此目录的路径。
- PATH环境变量中列出的目录。
(也许我应该在发布SO之前进行谷歌搜索;)
将DLL发送到程序的文件夹中。 (与exe文件相同)。
然后Windows应首先尝试您的版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.