Здравствуйте, коллеги!
Пишу надстройку для Outlook 2007, VSTO.
Заказчику остро необходимо полностью подменить explorer для папки. Ничего кроме WebView не нашел.
Соответственно, на WebView лежит ActiveX, написанный на C#.
Дабы не быть голословным:
[ComVisible(true)]
[Guid("97CC517A-5527-4359-9814-4503C2501C5E")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ITaskView
{
[DispId(1)]
void SetSession(Microsoft.Office.Interop.Outlook.Application Application);
[DispId(2)]
void SetFolder(Microsoft.Office.Interop.Outlook.Folder Folder);
}
public delegate void HierarchyErrorEventHandler(TaskItem Task, string ErrorMessage);
[ComVisible(true)]
[Guid("F313538F-9468-49b6-BE7C-4408D4C44FBF")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ITaskViewEvents
{
[DispId(1)]
void HierarchyError(TaskItem Task, string ErrorMessage);
}
[Guid("682707FF-07D4-40bf-A946-05CE88A52CB5")]
[ComVisible(true)]
[ComDefaultInterface(typeof(ITaskView))]
[ComSourceInterfaces(typeof(ITaskViewEvents))]
[ProgId("TaskMaster.TaskView")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public partial class TaskView : UserControl, ITaskView
{
[ComVisible(true)]
public void SetSession(Microsoft.Office.Interop.Outlook.Application Application) { }
[ComVisible(true)]
public void SetFolder(Microsoft.Office.Interop.Outlook.Folder Folder) { }
public event HierarchyErrorEventHandler HierarchyError;
}
Собственно, вопрос: как мне из .Net кода подписаться на эвенты ActiveX контрола, написанного на .Net же.
До контрола достучался так:
IHTMLDocument2 doc = (IHTMLDocument2) _explorer.HTMLDocument;
IHTMLElementCollection els = (IHTMLElementCollection) doc.all.tags("object");
IHTMLObjectElement element = (IHTMLObjectElement) els.item(null, 0);
ITaskView _view = (ITaskView) element.@object;
_view.SetSession(Application);
_view.SetFolder((Folder) _explorer.CurrentFolder);
Прямые вызовы ходят, все нормально. А как на событие-то подписаться?
Буду признателен, если кто-нибудь растолкует.