我们有一个在Vista和Win7上运行良好的DLL一段时间,但在XP上运行时出现错误“调用LoadLibrary()
加载它时,找不到指定的程序”。在Windows XP上运行应用程序时出现“无法找到指定的程序”错误(例外c0000139)
我试着用配置文件选项运行它通过Dependency Walker中,以全局标志设置为显示卡装载器的唯一貌似有用的信息,我可以把它弄出来是:
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
我相信,例外c0000139
是'未找到入口点'。
我们已经注意确保没有任何对后XP API的直接依赖关系(有几个,但这些都是动态加载的LoadLibrary()
)。该dll建立了WINVER
和_WIN32_WINNT
设置为0x0501
。库的入口点在依赖关系监视器中显示的输出中可见,并且没有明显的缺失依赖关系。相同的应用程序在Vista和Win7中运行得非常好。早期版本的dll在XP上运行良好(由于此组件的性质,很难看出哪些更改会导致事件中断)。
编辑:其他的事情我认为我打折:
- Visual Studio的运行时间是从工作的dll和一个不都是一样的
还有什么明显的我失踪了吗?
一个完全胡乱猜测:XP机器没有所需的C运行时(CRT)库版本? – 2012-01-18 09:55:50
是的,这是我的想法,但我添加了CRT。 – 2012-01-18 10:31:55
我今天刚刚有同样的问题...我有一个DLL加载除Windows XP以外的所有类型的窗口。 (1a8.8c4):未知异常 - 代码c0000139(第一次机会) LDR:在函数LdrpSnapIAT中引发的异常c0000139 – Benj 2012-01-18 14:59:08