LoadLibrary失败:第一次机会异常0xC0000139(找不到DLL) - 如何调试?

Pet*_*asi 5 c++ dll exception loadlibrary

我有一个dll"mytest.dll",当加载via时LoadLibrary(),返回NULL(和127作为GetLastError()).如果我在"mytest.dll"上使用DependencyWalker,它会报告它应该正确加载并且正确找到所有DLL.在主机exe上运行DependencyWalker的探查器选项为我提供了日志中的相关部分:

00:00:55.099: Loaded "mytest.DLL" at address 0x07860000 by thread 0xBBC.  Successfully hooked module.
00:00:55.115: First chance exception 0xC0000139 (DLL Not Found) occurred in "NTDLL.DLL" at address 0x76E24285 by thread 0xBBC.
00:00:55.115: Unloaded "mytest.DLL" at address 0x07860000 by thread 0xBBC.
00:00:55.115: LoadLibraryW("mytest.dll") returned NULL by thread 0xBBC. Error: The specified procedure could not be found (127).

有没有办法调试这个来找出NTDLL.DLL报告试图查找的DLL Not Found消息?或者我应该在其他地方寻找问题的根源?

请注意,从另一个应用程序加载相同的"mytest.DLL"似乎正常工作.

Rob*_*obS 3

您的应用程序是否会在初始加载(也许)之后尝试通过 GetProcAddress 调用未找到的特定 DLL 函数?它是 32 位还是 64 位应用程序?

如果它按照您的建议在另一个应用程序中正确加载,那么它可能有一个正确的入口点。

快速谷歌搜索表明您返回的错误代码可能来自 DLL 中缺少的函数名称(或特定函数的序数值)。我建议在Exescope之类的工具中打开 DLL并检查导出列表。

它还可以解释为什么 DLL 与另一个应用程序一起工作(也许另一个应用程序在 DLL 中使用不同的导出函数)?