티스토리 뷰

현상

프레임 Internet Explorer에서 호스팅되는 MFC ActiveX 컨트롤을 클릭하면 어설션을 CTLINPLC.CPP 줄 328 발생할 수 있습니다.


원인

Assert 위치를 확인하여 COleControl::BuildSharedMenu()에서 것입니다:

if (m_pUIActiveInfo != NULL) {

      ASSERT(m_pUIActiveInfo->m_hSharedMenu != NULL);

      return TRUE;

}


메뉴 병합 수행 중인 없습니다 때문에 m_pUIActiveInfo m_hSharedMenu-> 항상 NULL입니다. m_pUIActiveInfo de-activated UI 컨트롤이 있을 때 NULL로 설정됩니다. 이 경우 COleControl::OnActivateInPlace() 호출될 수 있으므로 먼저 를 클릭하면 활성화되는 내부 컨트롤입니다. 이 BuildSharedMenu() 차례로 호출합니다. Internet Explorer DoVerb(OLEIVERB_UIACTIVATE) BuildSharedMenu() 반환될 때 있지만 OnActivateInPlace() 종료 전에 컨트롤에서 호출합니다. 이로 인해 다시 입력해야 OnActivateInPlace() 및 BuildSharedMenu() 다시 호출할 수 있습니다. 컨트롤의 UI de-활성 않았기 때문에 m_pUIActiveInfo NULL이 아닙니다.
 

해결 방법

OnActivateInPlace() 다시 OnActivateInPlace() 재정의하고 이를 다시 입력해야 않은 경우 확인하려면 정적 부울 플래그를 설정하면 입력해야 중인 것을 방지하기 위해 필요합니다. 있는 경우 다음 반환:

   HRESULT CTestCtrl::OnActivateInPlace(BOOL bUIActivate, LPMSG pMsg)

   {

      static BOOL bInsideFunc = FALSE;

      if (!bInsideFunc)

      {

         bInsideFunc = TRUE;

         HRESULT hr = COleControl::OnActivateInPlace(bUIActivate, pMsg);

         bInsideFunc = FALSE;

         return hr;

      }

      return S_OK;

   }


현재 상태

Microsoft는 이 문서의 시작 부분에 나열한 제품에서 버그가 수 있도록 이 확인했습니다. 이 문제는 Visual C++ 버전 6.0 Windows용 수정되었습니다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함