使用此 C++ 库

使用此 C++ 库

我正在尝试使用一个调用 C++ 库的可执行文件(用 C 编写)。我的Windows 服务器 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 系统)。

答案1

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

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

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

答案2

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

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

相关内容