我们有一个dll在Vista和Win7上运行了一段时间,但是在XP上运行时我们得到错误“无法找到指定的程序” {{1}调用它来加载它。
我尝试使用Profile选项运行Dependency Walker,将Global Flags设置为显示加载程序快照,我可以从中获得的唯一看似有用的信息是:
LoadLibrary()
我认为异常LDR: Snapping imports for MyDll.dll from KERNEL32.dll
LDR: LdrGetProcedureAddress by NAME - RtlGetLastWin32Error
LDR: exception c0000139 thrown within function LdrpSnapIAT
Exception record: 0012E490
Context record: 0012E4A4
Context->Eip = 7C9673BE
Context->Ebp = 0012E7C0
Context->Esp = 0012E770
LDR: LdrpSnapIAT - caught exception c0000139 snapping thunks (#2)
LDR: LdrpWalkImportTable - LdrpSnapIAT #2 failed with status c0000139
是'未找到入口点'。
我们已经注意确保对XP后的API没有任何直接依赖关系(有一些,但这些是c0000139
动态加载的)。该dll是在LoadLibrary()
和WINVER
设置为_WIN32_WINNT
的情况下构建的。在Dependency Monitor中显示的导出中可以看到库的入口点,并且没有明显缺少的依赖项。同样的应用程序在Vista和Win7中运行得非常好。早期版本的dll在XP上工作正常(由于该组件的性质,很难看出哪些更改导致事情中断)。
编辑:我想到的其他事情我打折了:
还有什么明显的我遗失了吗?
答案 0 :(得分:4)
我不知道这是否会对你有所帮助,但我今天遇到了与装载机快照完全相同的问题。事实证明我的问题在depends.exe中可见,但我不知道dll是粉红色的重要性......我只是诊断出了依赖的导出问题,而不是导入问题。
我的问题是我使用的是“RegGetValue”,只能在Vista +上使用。不幸的是,如果您在Windows XP上使用仅Vista的API,则没有正确的错误报告。取决于在导入部分中显示如下:
我注意到你的问题是使用Kernel32.dll而不是Advapi.dll所以检查导入是否依赖...