使用这个C ++库


1

我正在尝试使用一个调用C ++库的可执行文件(用C语言编写)。我收到了这个错误 Windows Server 2008 框:

Faulting application name: sample.exe, version: 0.0.0.0, time stamp: 0x4d668157
Faulting module name: MSVCR90.dll, version: 9.0.30729.4974, time stamp: 0x4b7a226f
Exception code: 0xc0000417
Fault offset: 0x0002fc96
Faulting process id: 0xf10
Faulting application start time: 0x01cbd45775cc7011
Faulting application path: C:\Bprobe\sample.exe
Faulting module path: C:\Windows\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4974_none_50940634bcb759cb\MSVCR90.dll
Report Id: b37b5e67-404a-11e0-b69c-00155d2fb513

相同的EXE文件适用于Windows 7和Windows XP,因此我猜它是一个缺少的组件。

有任何想法吗?

这似乎不是Windows Server 2008独有的问题。我刚刚在Windows XP上测试并得到了同样的错误(我确实有其他Windows XP工具箱可以使用)。


它是,缺少DLL(msvcr90.dll)。您必须将运行时支持DLL部署到计算机。
Hans Passant

Hans,计算机安装了c ++运行时(事实上,它安装了带有c ++的Visual Studio 2010)。我还能错过什么?

1
@Hans,版本字符串存在的事实,以及它在所讨论的模块中的错误,证明了msvcr90.dll存在。
bdonlan

1
应该转移到超级用户,因为Gonzalo是最终用户而不是开发人员(没有源代码)
bdonlan

1
视觉工作室版本错误,VS2010使用msvcr100.dll。我估计这个代码需要重新编译。是的,你需要供应商的支持,他们应该给你一个安装程序,以获得使这个代码工作所需的一切。
Hans Passant

Answers:


2

异常代码0xc0000417是STATUS_INVALID_CRUNTIME_PARAMETER。听起来像无效参数传递给C运行时函数。

如果你在这台机器上安装了WinDBG或VS,我会在调试器下启动应用程序。设置调试器以中断所有第一次机会异常(或者您可以直接添加此异常代码并使其仅在此异常时中断)并且当您遇到异常时,检查调用堆栈。使用Microsoft的公共符号服务器来解析符号(它将具有VS 2008 CRT库符号)。让.exe存在.exe或。符号搜索路径。

如果模块中的帧位于调用堆栈的任何位置,请从上到下双击第一个帧。检查是否正在调用哪个C运行时函数。


0

这不是一个缺少的库问题,但是您提供的信息甚至不足以开始诊断问题。尝试在调试器中运行程序并查看崩溃的位置。很可能你正在使用的程序或库与Windows 7不兼容 - 也就是说,它做了一些从未允许做出的错误假设,导致在Win7中这些假设不成立时崩溃。

如果您没有源代码,请尝试兼容性向导(右键单击exe - >解决兼容性问题)。如果这没有帮助,请联系供应商并让他们修复程序中的错误。


我没有源代码,它在Windows 7中工作,问题出在Windows 2008中。

1
没有来源?联系供应商?
James Love

已经做了,他提出了一些建议,但没有一个帮助:-(

1
@Gonzalo再次联系供应商。这是他们的问题。
David Heffernan

1
您是否尝试过连接VS2010以查看它停止的位置?调试器输出可能会显示在ASM中,但如果您没有源,则您没有真正的选择。
James Love
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.