Я тащусь от очень немногих доступных примеров собственных надстроек Word, пытаясь найти способ реконструировать событие VSTO Document.OnBeforeClose.
В настоящее время я понял, что IDTExtensibility2
имеет ссылку на DTE
и что DTE
это тот же COM-подход, используемый для расширений Visual Studio. (поэтому, если я найду работающую надстройку VS с написанным на C ++ аналогичным типом хуков, она быстро решит мои проблемы.)
Это было взято из TestAddin2
образец 2000-х годов:
BEGIN_COM_MAP(CConnect)
COM_INTERFACE_ENTRY2(IDispatch, IRibbonCallback)
COM_INTERFACE_ENTRY(IConnect)
COM_INTERFACE_ENTRY(_IDTExtensibility2)
COM_INTERFACE_ENTRY(_FormRegionStartup)
COM_INTERFACE_ENTRY(IRibbonExtensibility)
COM_INTERFACE_ENTRY(IRibbonCallback)
END_COM_MAP()
Так что в настоящее время мне интересно:
Похоже, что кому-то на SO удалось написать дополнение к нативному коду (упаковка COM-надстройки для развертывания), поэтому я действительно ожидаю помощи здесь.
Вот пример, иллюстрирующий, как реализовать обработчики событий для COM-интерфейсов с ATL IDispEventImpl/BEGIN_SINK_MAP/SINK_ENTRY_EX/END_SINK_MAP
:
http://support.microsoft.com/kb/194179.
Чтобы создать определения COM для MS Word и объектной модели Office, вам понадобятся следующие файлы:
MSADDNDR.TLB
MSO.DLL
MSWORD.OLB
VBE6EXT.OLB
Вы должны быть в состоянии найти их где-нибудь в «C: \ Program Files (x86) \ Microsoft Office \». Следующий код импорта работал у меня некоторое время назад с Office 2007, возможно, вам придется настроить его для более поздних версий Office:
#import "TypeLib\MSADDNDR.TLB" \
raw_interfaces_only \
no_namespace \
auto_search
#import "TypeLib\MSWORD.OLB" \
raw_interfaces_only \
rename("ExitWindows","MsoExitWindows") \
rename("FindText","MsoFindText") \
rename("DocumentProperties", "MsoDocumentProperties") \
rename("RGB", "MsoRGB") \
auto_search \
exclude("IAccessible", "AddIn", "Adjustments")
Других решений пока нет …