如何强制从当前目录加载DLL

时间:2014-10-23 12:48:52

标签: delphi

我已将GdiPlus.dll的较新版本复制到我的项目目录中。 但是窗口总是加载它

  

“C:\ Windows \ WinSxS文件\ x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.6002.23084_x-ww_f3f35550 \ GDIPLUS.DLL”

我在XP上。

2 个答案:

答案 0 :(得分:0)

要对DLL加载进行完全控制,请将DLL的完整路径传递给LoadLibrary

如果您使用运行时链接,这是可行的。对于加载时间链接,您依赖于DLL搜索顺序。搜索的第一件事是exe加载的目录。也就是说,对于像GDI +这样的操作系统组件来说,无论如何系统都会使用SxS DLL,这似乎是合理的。

您的问题标题是"当前目录"但是在链接DLL时,你永远不想依赖当前目录的值。当前目录的值是不可预测的。

最后,GDI +是一个系统组件,我认为提供自己的GDI + DLL是明智之举。自redistribution of GDI+ is not permitted以来,它很可能也是非法的。也许您正在为您的问题选择错误的解决方案。

答案 1 :(得分:0)

您可以使用此声明将dll的目录设置为已定义的路径。

function SetDllDirectory(lpPathName:PWideChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryW';

请记住在使用dll后更改路径。