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