【发布时间】:2014-07-22 15:54:16
【问题描述】:
我遇到了异常:
Unable to load DLL 'MyDll.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
正如Unable to load DLL (Module could not be found HRESULT: 0x8007007E) 的答案所暗示的,我们希望将非托管 dll 与所有托管 dll 一起保留在当前目录中(并且它就在那里)。出于调试目的,我如何打印将用于加载 dll 的当前目录?是Directory.GetCurrentDirectory()吗?
【问题讨论】:
-
DLL 文件夹搜索顺序在此处描述:stackoverflow.com/questions/268627/… 您也可以像此处描述的那样显式设置搜索目录:stackoverflow.com/questions/2864673/…
-
当前目录不是特别相关。您没有显示任何代码或向我们提供足够的详细信息。
-
@DavidHeffernan,为什么当前目录不相关?它应该是寻找dll的第二位......
-
如果您依赖当前目录来定位您的 DLL,那么您做错了。将非托管 DLL 与可执行文件放在同一目录中并完成。
-
如果您需要控制 DLL 的加载位置,并且您不能将 DLL 放在可执行文件夹中,我发现使用显式调用
LoadLibrary将完整路径传递给动态链接库。或者致电SetDllDirectory或AddDllDirectory。我个人更喜欢LoadLibrary。