我有一个dll“mytest.dll”,当通过LoadLibrary()加载时,返回NULL(并且127作为GetLastError())。如果在“mytest.dll”上使用DependencyWalker,它将报告应正确加载并且可以正确找到所有DLL。在主机exe上运行DependencyWalker的事件探查器选项,在日志中提供了以下相关部分:

00:00:55.099:通过线程0xBBC在地址0x07860000处加载了“mytest.DLL”。成功挂接模块。
00:00:55.115:线程0xBBC在地址为0x76E24285的“NTDLL.DLL”中发生了第一次机会异常0xC0000139(找不到DLL)。
00:00:55.115:通过线程0xBBC在地址0x07860000处卸载了“mytest.DLL”。
00:00:55.115:线程0xBBC返回LoadLibraryW(“mytest.dll”)NULL。错误:找不到指定的过程(127)。

有没有一种方法可以调试此方法,以找出NTDLL.DLL报告试图查找的“DLL Not Found”消息?还是我应该在其他地方寻找问题的根源?

请注意,从另一个应用程序加载此相同的“mytest.DLL”似乎可以正常工作。

最佳答案

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

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

快速的google search建议您返回的错误代码很可能是由于DLL中缺少函数名(或特定函数的序数值)引起的。我建议在Exescope之类的地方打开DLL并检查导出列表。

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

关于c++ - LoadLibrary失败: First chance exception 0xC0000139 (DLL Not Found) - How to debug?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/795391/

10-11 23:20
查看更多