Какое событие отправляет IE, когда элемент управления ActiveX выгружается? - PullRequest
4 голосов
/ 27 мая 2010

Привет, у меня есть ActiveX, как это:

class CMyActiveX :
   public CComObjectRootEx...
   ...
{
   HRESULT FinalContruct(){return S_OK;}
   void Start()
   {
      // a new thread is created here for some task
   }
   void FinalRelease()
   {
      // if the thread is alive kill it
   }
}

Однако при закрытии браузера метод FinalRelease не вызывается. Таким образом, поток остается живым, и на выходе встречается сбой.

Есть идеи по этому поводу? Спасибо!

1 Ответ

1 голос
/ 08 мая 2012

Я обнаружил, что мой control :: SetClientSite (NULL) был надежно вызван IE при закрытии или выходе из страницы, поэтому я выполняю там свою важную работу по закрытию. Это переопределение метода в IOleObjectImpl.

HRESULT CControl::SetClientSite(IOleClientSite *pClientSite)
{
    if (!pClientSite) {
        // Means IE is closing or about to, or at least
        // that we've lost our place in the sun...
        do shutdown stuff
    }
    IOleObjectImpl::SetClientSite(pClientSite);
    if (pClientSite) {
        ....

MSDN - метод IOleObject :: SetClientSite

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...