Group:  Microsoft Outlook ยป microsoft.public.outlook.program_addins
Thread: my first outlook add-in, in c++...

Geek News

my first outlook add-in, in c++...
optimist 5/15/2006 10:02:02 PM
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;
}
Re: my first outlook add-in, in c++...
"Ken Slovak - [MVP - Outlook]" <kenslovak[ at ]mvps.org> 5/16/2006 1:26:44 PM
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;
> }

Re: my first outlook add-in, in c++...
optimist 5/16/2006 2:03:01 PM
"Ken Slovak - [MVP - Outlook]" wrote:

[Quoted Text]
> 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?
Re: my first outlook add-in, in c++...
optimist 5/16/2006 3:44:03 PM
I found the problem - I created another app instance in my
OnStartupComplete, once I removed that I'm now getting the OnDisconnect.

Home | Search | Terms | Imprint Contact
Newsgroups Reader - provided by WiredBox.Net