«
弹出加载框后调用线程函数访问数据库,软件异常退出

时间:2023-9-6    作者:范文泉    分类: 编程


因业务需要在点击搜索后弹出对话框显示正在查询中,然后在这个对话框里创建线程来进行数据库的查询。然后软件异常退出。

如上图,因为自己电脑上不会出这个问题,所以通过弹出对话框形式,定位程序出错位置,发现是查询数据库时退出的,查看了数据库的相关代码,未发现初始COM组件,但是在主程序中有初始化,主程序中数据库查询未出现任何错误,但是子线程中未初始化,在子线程里加上下面代码

    if (S_OK != ::CoInitialize(NULL))
    {
        ::MessageBox(0, "初始化Com库失败", "错误", MB_ICONERROR);
        return 0;
    }
    pThis->m_pfnLoad(pThis, pThis->m_pParamIN);
    ::CoUninitialize();

这里的问题解决了,但是百度后,发现有个更新好的办法,在主程序里使用下面代码

if (S_OK != ::CoInitializeEx(NULL, COINIT_MULTITHREADED))
{
TRACE(traceAppMsg, 0, "警告: 初始化Com失败,应用程序将终止。\n");
return FALSE;
}

然后在子程序创建后就不需要再初始化COM库了。

标签: C++异常 COM