因业务需要在点击搜索后弹出对话框显示正在查询中,然后在这个对话框里创建线程来进行数据库的查询。然后软件异常退出。
如上图,因为自己电脑上不会出这个问题,所以通过弹出对话框形式,定位程序出错位置,发现是查询数据库时退出的,查看了数据库的相关代码,未发现初始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库了。