View Single Post
  #7  
Old June 11th 07, 06:10 PM posted to microsoft.public.outlook.program_addins
bstrum
external usenet poster
 
Posts: 19
Default C# and New Inspector event

Does anyone know how to do this? We have spent a lot of time making our code
version independent using late binding. We now need to be able to hook into
the newinspector event.

Here is some more code that I am trying. Right now, it throws an
InvalidCast exception on m_oConnectionPoint.Advise(this, out m_Cookie).

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;


using ThinkTron.Email.Common;
using MO = ManagedOffice;
using MSWord = ManagedOffice.Word;
using MSOutlook = ManagedOffice.Outlook;

namespace SSNProtector
{
[InterfaceType(ComInterfaceType.InterfaceIsIDispatc h),
GuidAttribute("00063079-0000-0000-c000-000000000046")]
public interface DInspectorEvents
{
void NewInspector([MarshalAs(UnmanagedType.Struct)]object
NewInspector);
}

class InspectorEventHelper : IDisposable, DInspectorEvents
{
public InspectorEventHelper()
{
m_oConnectionPoint = null;
m_Cookie = 0;
}

private IConnectionPoint m_oConnectionPoint;
private int m_Cookie;

public void SetupConnection(object Inspectors)
{
if (m_Cookie != 0) return;
try
{
Guid guid = new
Guid("{00063079-0000-0000-c000-000000000046}");

IConnectionPointContainer oCPP =
(IConnectionPointContainer)Inspectors;
oCPP.FindConnectionPoint(ref guid, out m_oConnectionPoint);

m_oConnectionPoint.Advise(this, out m_Cookie);

}
catch (Exception exc)
{
Log.Write(exc.Message);
}
}

public void RemoveConnection()
{
if (m_Cookie != 0)
{
m_oConnectionPoint.Unadvise(m_Cookie);
m_oConnectionPoint = null;
m_Cookie = 0;
}
}

#region IDisposable Members

public void Dispose()
{
RemoveConnection();
}

#endregion

//#region DOutlookApplicationEvents_10 Members
[DispId(0xF001)]
public void NewInspector([MarshalAs(UnmanagedType.Struct)]object
NewInspector)
{
}
}
}


"Dmitry Streblechenko" wrote:

But it still requires an interop; the original question was about doing COM
event sinking using the low level COM API (IConnectionPointContainer,
IConnectionPoint, etc).
But I can't imagine why the lowest Outlook version interop (2000?) cannot be
used instead...

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

"Ken Slovak - [MVP - Outlook]" wrote in message
...
Helmut Obertanner has an Inspector wrapper example in C# up on
www.outlookcode.com.

--
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


"Dmitry Streblechenko" wrote in message
...
I have no idea how to do that in C#, sorry.

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool





Ads