![]() |
my first outlook add-in, in c++...
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; CComPtrOutlook::_Explorer spExplorer; spExplorer = spApp-ActiveExplorer(); m_spExplorer = spExplorer; ExpEvents::DispEventAdvise((IDispatch*)m_spExplore r,&__uuidof(Outlook::ExplorerEvents)); AppEvents::DispEventAdvise((IDispatch*)m_spApp,&__ uuidof(Outlook::ApplicationEvents)); return S_OK; } |
my first outlook add-in, in c++...
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" wrote in message ... 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; CComPtrOutlook::_Explorer spExplorer; spExplorer = spApp-ActiveExplorer(); m_spExplorer = spExplorer; ExpEvents::DispEventAdvise((IDispatch*)m_spExplore r,&__uuidof(Outlook::ExplorerEvents)); AppEvents::DispEventAdvise((IDispatch*)m_spApp,&__ uuidof(Outlook::ApplicationEvents)); return S_OK; } |
my first outlook add-in, in c++...
"Ken Slovak - [MVP - Outlook]" wrote:
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. That's one of the problems I'm looking for help on - how to "release" the objects... In my OnConnection I'm saving a pointer to the Application and ActiveExplorer objects - I haven't yet figured out why my NewExplorer callback hasn't been triggered but since in my testing I only have the one instance of outlook running I figured that wasn't too surprising - anyway, in my OnClose() I'm calling Release() on the application object (m_spApp-GetApplication()-Release();) but if I try to call Release on the explorer object (m_spExplorer-Release();), I get a 'cannot access private member declared in class ... error from the compiler. I got the same error from the release of the application before I found the GetApplication() method. What's the correct way to "release" the objects? |
my first outlook add-in, in c++...
I found the problem - I created another app instance in my
OnStartupComplete, once I removed that I'm now getting the OnDisconnect. |
All times are GMT +1. The time now is 09:26 AM. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2006 OutlookBanter.com