In On_Connection you first need to check if there are any Explorers at all, Outlook can be started using automation with no UI (think ActiveSynch). You need to maintain a count or collection of Explorers and Inspectors and handle the Inspector.Close and Explorer.Close events. In those events if the counts of the collections is <= 1 you know Outlook wants to close down. At that point you need to release all objects that are being retained so the On_Disconnection event will fire.
-- Ken Slovak [MVP - Outlook] http://www.slovaktech.com Author: Absolute Beginner's Guide to Microsoft Office Outlook 2003 Reminder Manager, Extended Reminders, Attachment Options http://www.slovaktech.com/products.htm
"optimist" <optimist[ at ]discussions.microsoft.com> wrote in message news:ED5E579F-3222-4CA8-B764-8CDFE50F9DB7[ at ]microsoft.com...
[Quoted Text] > And I'm apparently suffering from a common problem - how to get Outlook to > shutdown after my add-in is installed. I've flailed for a couple of > days, > now it's time to ask for help. I've gleaned that I need to somehow close > or > release or free something in the OnClose event for the Explorer, but what > and > how is that done? I've tried doing > appPtr->GetApplication()->Release()...which doesn't seem to have any > effect. > Here's the OnConnection() code where some of the initialization code > lives, > if it helps to point out my failures... > > STDMETHODIMP CConnect::OnConnection(IDispatch *pApplication, > AddInDesignerObjects::ext_ConnectMode ConnectMode, IDispatch *pAddInInst, > SAFEARRAY ** /*custom*/ ) > { > pApplication->QueryInterface(__uuidof(IDispatch), > (LPVOID*)&m_pApplication); > > CComQIPtr <Outlook::_Application> spApp(pApplication); > ATLASSERT(spApp); > m_spApp = spApp; > > CComPtr<Outlook::_Explorer> spExplorer; > > spExplorer = spApp->ActiveExplorer(); > m_spExplorer = spExplorer; > > ExpEvents::DispEventAdvise((IDispatch*)m_spExplorer,&__uuidof(Outlook::ExplorerEvents)); > > AppEvents::DispEventAdvise((IDispatch*)m_spApp,&__uuidof(Outlook::ApplicationEvents)); > > return S_OK; > }
|