c++ - 抑制纯虚函数调用模态对话框并静默崩溃

标签 c++ winapi

<分区>

背景资料: 我们的应用程序使用由外部供应商编写的组件。该组件有时会因 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但它仍然显示错误对话框。

有关如何抑制该对话框并静默崩溃的任何线索

最佳答案

也许您可以检测到应用程序前面有一个对话框并自行结束应用程序,而不是直接检测崩溃。只要消息泵可以运行(在显示消息框时就会运行),您就可以使用 GetActiveWindow 进行定时器回调。并验证返回的窗口句柄是否属于您。

关于c++ - 抑制纯虚函数调用模态对话框并静默崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143551/

相关文章:

c++ - 强制自动并行化 VS 2012

C++ - 具有结构共享/不变性的类 map 数据结构

android - 使用 Arduino 获取手机 IMEI

c++ - 获取程序的 32 位基地址,而不制作 64 位(仅)程序?

c++ - 如何在 Win32 中递归创建文件夹?

c++ - 我的 .h 文件有问题

c++ - 是否可以在 Visual Studio 2013 中设置多个条件断点?

c++ - Windows 传感器 API - CLSID 的未解析外部符号

c - 警告 : assignment from incompatible pointer type buffer

c++ - 如何使用std::list实现LRU