Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;找不到指定的程序";在Windows XP上运行应用程序时出错(异常c0000139)_C_Windows_Dll - Fatal编程技术网

&引用;找不到指定的程序";在Windows XP上运行应用程序时出错(异常c0000139)

&引用;找不到指定的程序";在Windows XP上运行应用程序时出错(异常c0000139),c,windows,dll,C,Windows,Dll,我们有一个dll,它在Vista和Win7上运行了一段时间,但是在XP上运行时,当调用LoadLibrary()加载它时,会出现错误“找不到指定的过程” 我试着通过Dependency Walker使用Profile选项运行它,全局标志设置为显示加载程序快照,我能从中获得的唯一看似有用的信息是: LDR: Snapping imports for MyDll.dll from KERNEL32.dll LDR: LdrGetProcedureAddress by NAME - RtlGetLas

我们有一个dll,它在Vista和Win7上运行了一段时间,但是在XP上运行时,当调用
LoadLibrary()
加载它时,会出现错误“找不到指定的过程”

我试着通过Dependency Walker使用Profile选项运行它,全局标志设置为显示加载程序快照,我能从中获得的唯一看似有用的信息是:

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
\u WIN32\u WINNT
设置为
0x0501
的情况下构建的。库的入口点在Dependency Monitor中显示的导出中可见,并且没有明显缺少的依赖项。同样的应用程序在Vista和Win7中运行完全正常。早期版本的dll在XP上运行良好(由于该组件的性质,很难看出是哪些更改导致了故障)

编辑:我认为我已经打折的其他事情:

  • 已安装Visual studio运行时
  • 工作dll和不工作dll中的清单文件是相同的

还有什么明显的我遗漏的吗?

我不知道这是否对您有帮助,但我今天遇到了与加载程序快照完全相同的问题。事实证明,我的问题在depens.exe中可见,但我不知道DLL为粉红色的意义。。。我只诊断过依赖项的导出问题,而不是导入问题

我的问题是我使用的是“RegGetValue”,它只在Vista+上可用。不幸的是,如果在Windows XP上使用仅限Vista的API,则没有正确的错误报告。在导入部分显示如下内容:


我注意到您的问题是Kernel32.dll而不是Advapi.dll,因此请使用depends…检查导入情况。

我不知道这是否对您有帮助,但我今天遇到了与加载程序快照完全相同的问题。事实证明,我的问题在depens.exe中可见,但我不知道DLL为粉红色的意义。。。我只诊断过依赖项的导出问题,而不是导入问题

我的问题是我使用的是“RegGetValue”,它只在Vista+上可用。不幸的是,如果在Windows XP上使用仅限Vista的API,则没有正确的错误报告。在导入部分显示如下内容:


我注意到你的问题是关于Kernel32.dll而不是Advapi.dll,因此请使用depends检查导入…

一个完全胡乱的猜测:XP机器没有所需版本的C运行时(CRT)库?是的,这是我的想法,但我添加了CRT。我今天刚刚遇到了完全相同的问题。。。我有一个DLL,它可以加载除WindowsXP以外的所有版本的windows。我还尝试了加载程序快照,并看到:(1a8.8c4):未知异常-代码c0000139(第一次机会)LDR:在函数LDRPSNAPIATA中引发异常c0000139这是您第一次使用VS2010在XP上尝试DLL吗?我真正做的只是在2010年重建我的项目(当DLL在2008年构建时用来加载)一个完全胡乱的猜测:XP机器没有所需版本的C运行时(CRT)库?是的,这是我的想法,但我添加了CRT。我今天刚刚遇到了完全相同的问题。。。我有一个DLL,它可以加载除WindowsXP以外的所有版本的windows。我还尝试了加载程序快照,并看到:(1a8.8c4):未知异常-代码c0000139(第一次机会)LDR:在函数LDRPSNAPIATA中引发异常c0000139这是您第一次使用VS2010在XP上尝试DLL吗?我真正做的就是在2010年重建我的项目(当DLL使用2008构建时用于加载),顺便说一下,加载程序快照没有告诉我它是RegGetValue。。。它只是指出了Advapi,所以我不得不依靠depens来完成其余的工作……感谢Benj,这正是问题所在!我也没有意识到粉色图标的重要性,但我会把它铭记在心。在我的例子中,它是
Kernel32.dll
。我的dll正在调用Vista中添加的一些函数(例如
InitialiseConditionVariable()
)。加载时无法在
kernel32
中解决这些问题,这导致了c0000139异常。太好了,很高兴它有帮助!我觉得这是同样的问题。顺便说一下,loader snaps没有告诉我这是RegGetValue。。。它只是指出了Advapi,所以我不得不依靠depens来完成其余的工作……感谢Benj,这正是问题所在!我也没有意识到粉色图标的重要性,但我会把它铭记在心。在我的例子中,它是
Kernel32.dll
。我的dll正在调用Vista中添加的一些函数(例如
InitialiseConditionVariable()
)。加载时无法在
kernel32
中解决这些问题,这导致了c0000139异常。太好了,很高兴它有帮助!我觉得这是同样的问题。