C++ WebBrowser控件(MFC)是在Windows 7和Vista中使用的独立线程创建的,但不适用于Windows XP

C++ WebBrowser控件(MFC)是在Windows 7和Vista中使用的独立线程创建的,但不适用于Windows XP,c++,mfc,webbrowser-control,C++,Mfc,Webbrowser Control,我在主线程中有一个CWnd,在一个单独的线程中创建了一个带有WebBrowser控件的CWnd。 这是必要的,因为WebBrowser导航到运行Java脚本的URL,这些脚本将阻止WebBrowser。因此,我在一个单独的线程中使用WebBrowser控件来防止GUI线程vom挂起。我也在我的应用程序的主线程中这样做: CCustomOccManager *pMgr = new CCustomOccManager(); AfxEnableControlContainer(pMgr); 这是为

我在主线程中有一个CWnd,在一个单独的线程中创建了一个带有WebBrowser控件的CWnd。 这是必要的,因为WebBrowser导航到运行Java脚本的URL,这些脚本将阻止WebBrowser。因此,我在一个单独的线程中使用WebBrowser控件来防止GUI线程vom挂起。我也在我的应用程序的主线程中这样做:

CCustomOccManager *pMgr = new CCustomOccManager();

AfxEnableControlContainer(pMgr);
这是为了将WebBrowser控件扩展到“window.external”界面上的my

分离线程机制在Windows7和Vista中运行良好。但在WindowsXP中,我得到了MFC断言

这是我的密码:

    m_WndMain.CreateEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, m_mainWndClass, NULL, WS_POPUP, m_pArgs->m_WindowRect, NULL, 0);
    m_WndMain.ShowWindow(SW_SHOW);
    m_WndMain.UpdateWindow();

    CRect clientRect;
    m_WndMain.GetClientRect(&clientRect);

    /* !!! CreateControl FAILS IN WINDOWS XP (=ASSERT)!!! */
    m_CtrlBrowser.CreateControl(CLSID_WebBrowser, NULL, WS_VISIBLE | WS_CHILD, clientRect, &m_WndMain, AFX_IDW_PANE_FIRST);

    .....
MFC断言(第925行内部调用第305行):

wincore.cpp,第925行
-----------------------------------
CHandleMap*pMap=afxMapHWND();

断言(pMap!=NULL);m_pmapHWND 我调试了MFC,发现COM必须在新创建的线程中初始化

因此,在Startrotine线程中,我正在执行一个

CoInitializeEx(NULL,  COINIT_APARTMENTTHREADED);
一开始,一切正常

有趣的是,在Windows7和Vista下不需要这个,只有XP

CoInitializeEx(NULL,  COINIT_APARTMENTTHREADED);