0

Delphi acitveX コントロールを実装しました。すべてがhtmlで正常に実行されます。その後、その ActiveX を MFC アプリケーションに埋め込みます。それをテストするときに、alt+tab で別のウィンドウ (Chrome など) に移動し、alt+tab でアプリケーションに戻ると、クラッシュしたことを除けば問題ありません。これが不明確な質問であることはわかっていますが、手がかりがありません。この状況を解決する手がかりはありますか?何が問題になる可能性がありますか、またはどのイベントを確認する必要がありますか? ありがとう。編集 1: これは、spy++ を使用したときに得たものです。

<04518> 00100B7C S WM_ACTIVATE fActive:WA_INACTIVE fMinimized:False hwndPrevious:(null)
<04519> 00100B7C S WM_ACTIVATETOPLEVEL fActive:False dwThreadID:0025F40C
<04520> 00100B7C R WM_ACTIVATETOPLEVEL

編集2:これは、ハングしたときにすべてを中断したときにコールスタックから取得したものです

mfc100d.dll!CThreadSlotData::GetThreadValue(int nSlot)  Line 248    C++
    mfc100d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* pfnCreateObject)  Line 420 + 0x11 bytes    C++
    mfc100d.dll!CThreadLocal<AFX_MODULE_THREAD_STATE>::GetData()  Line 179 + 0xd bytes  C++
    mfc100d.dll!AfxGetModuleThreadState()  Line 477 + 0x11 bytes    C++
    mfc100d.dll!afxMapHWND(int bCreate)  Line 289 + 0x5 bytes   C++
    mfc100d.dll!CWnd::FromHandlePermanent(HWND__ * hWnd)  Line 324 + 0x7 bytes  C++
    mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam)  Line 405 + 0x9 bytes    C++
    mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam)  Line 420 + 0x15 bytes   C++

編集 3: 私は Visual Studio 2010 を使用しています。コール スタックは、afxtls.cpp のこの関数の 2 行目でアプリケーションがハングしていることを示しています。これを解決する方法について誰かが光を当ててください。

inline void* CThreadSlotData::GetThreadValue(int nSlot)
{
    EnterCriticalSection(&m_sect);
    ASSERT(nSlot != 0 && nSlot < m_nMax);
    ASSERT(m_pSlotData != NULL);
    ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);
    ASSERT(m_tlsIndex != (DWORD)-1);
    if( nSlot <= 0 || nSlot >= m_nMax ) // check for retail builds.
    {
        LeaveCriticalSection(&m_sect);
        return NULL;
    }

    CThreadData* pData = (CThreadData*)TlsGetValue(m_tlsIndex);
4

0 に答える 0