【发布时间】:2014-06-02 08:08:38
【问题描述】:
背景资料: 我们的应用程序使用由外部供应商编写的组件。该组件有时会因 C++ 运行时错误“调用纯虚函数”对话框而崩溃。我们将应用程序部署在 LCD 显示器上,我们希望崩溃只是简单地崩溃,因为我们有一个流程可以在应用程序崩溃时重新启动它。
我们确定问题的根源在于供应商提供的组件,我们无法修改该组件,因为我们没有源头。如果我们能够在崩溃时自动重启应用程序,我们可以等待供应商提供的解决方案。问题是在用户单击错误的确定按钮之前应用程序不会崩溃,因此我们无法检测到进程停止运行。
我构建了一个小型测试应用程序,一个普通的 Win32 GUI 应用程序,我添加了以下代码:
class A
{
public:
A();
protected:
virtual void myTest() = 0;
void zubzub();
};
class B : public A
{
protected:
virtual void myTest();
};
A::A()
{
zubzub();
}
void B::myTest()
{
}
void A::zubzub()
{
this->myTest();
}
然后我在 VS 生成的 win32 应用程序模板中弹出窗口后创建了一个 A 的实例,瞧!我有模态对话框。我尝试了here的解决方案,但它仍然显示错误对话框。
关于如何抑制该对话框并静默崩溃的任何线索
【问题讨论】:
-
更好的方法是在构造完成之前或销毁开始之后不调用纯虚函数...
-
您唯一真正的解决方案是解决真正的问题。不要把头埋在沙子里。
-
让供应商修复他们的代码
-
@DavidHeffernan 你不认为如果这可能的话,提问者不可能自己想出这个吗?即使他们修复了这个错误,他们还没有发现的那个呢?
-
@VincentHubert:执行纯虚拟调用的代码损坏,您需要让该组件的所有者修复它。如果您有资源自己修复它,如果您没有让供应商修复它。另一个问题是,如果您正在销毁对象然后尝试使用它(这将是您的代码中的错误,需要再次修复)