2016-03-03 3 views
0

3/3/16Создание Bare Bones, неуправляемый Outlook/Офис Аддин

Я хочу, чтобы написать чистый, голые кости, неуправляемый COM надстройку для Microsoft Outlook/Office с помощью C++. Visual Studio заставляет вас использовать библиотеку активных шаблонов и скрывает всю базовую реализацию того, как хост (Outlook) подключается к добавлению. Вот немного информации о том, что я знаю до сих пор:

  1. Я знаю основные принципы работы COM и как это работает. Из моего понимания архитектуры я пришел к выводу, что, поскольку Outlook написан поверх COM, я, безусловно, должен иметь возможность запрашивать его интерфейсы и манипулировать приложением.

  2. Я знаю, что мне нужно использовать интерфейс IDTExtensibility2 для подключения к офисным приложениям. Кто-нибудь знает имя файла заголовка, которое содержит определение для этого интерфейса?

  3. Я знаю, что мне нужно зарегистрировать addin в реестре. Это COM-сервер, поэтому это ожидается.

Помимо этих пунктов, я потерян. Мне нужно знать шаг 1. Кто-нибудь может предоставить какой-либо тип ссылки или какой-то код?

И для записи я не хочу использовать VS, потому что я хочу знать, как создать добавление с нуля. Я хочу знать, какие компоненты необходимо, а не то, что предусмотрено в пакете.

EDIT 3/4/16

Так что я наткнулся на эту ссылку на MSDN:

https://msdn.microsoft.com/en-us/library/office/ff867268.aspx

Я не знаю, как я пропустил это, но это выглядит как хорошая отправная точка. Я думаю, что мой единственный зависание - это то, что использовать заголовки. Это может быть приключение, которое я должен предпринять, чтобы выяснить, какие из них необходимы для добавления голых костей. Я сделаю некоторые исследования и доложу об этой теме.

ответ

0
  1. Да.
  2. См. _IDTExtensibility2, what DLL to import into ATL project? для определения интерфейса IDTExtensibility2
  3. Да. Имейте в виду, что есть Outlook, специальные ключи, чтобы сделать прогноз загрузить надстройку в HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins

здесь является определение Delphi из IDTExtensibility2 interfacae: // *********************************************************************// // Interface: _IDTExtensibility2 // Flags: (4432) Hidden Dual OleAutomation Dispatchable // GUID: {B65AD801-ABAF-11D0-BB8B-00A0C90F2744} // *********************************************************************// _IDTExtensibility2 = interface(IDispatch) ['{B65AD801-ABAF-11D0-BB8B-00A0C90F2744}'] procedure OnConnection(const Application: IDispatch; ConnectMode: ext_ConnectMode; const AddInInst: IDispatch; var custom: PSafeArray); safecall; procedure OnDisconnection(RemoveMode: ext_DisconnectMode; var custom: PSafeArray); safecall; procedure OnAddInsUpdate(var custom: PSafeArray); safecall; procedure OnStartupComplete(var custom: PSafeArray); safecall; procedure OnBeginShutdown(var custom: PSafeArray); safecall; end;

+0

Ok поэтому я предполагаю, что _IDTExtensibility2 реализуется в MSADDNDR .dll, и я предполагаю, что это первичная dll для импорта. Существуют ли какие-либо другие базовые DLL, из которых необходимо импортировать? Должно ли приложение Outlook быть передано в _IDTExtensibility2 :: OnConnection? Если да, то как это пройти? –

+0

MSADDNDR.dll не реализует интерфейс _IDTExtensibility2. Он определяет его в библиотеке типов, встроенной в качестве ресурса. Ничто не мешает вам жестко кодировать определение интерфейса _IDTExtensibility2 в вашем коде. Вы не передаете объект Application методу IDTExtensibility2 :: OnConnection, Outlook сделает это для вас, когда он вызовет вашу реализацию. Параметр объявляется как общий IDispatch. Вы можете получить доступ к нему с помощью позднего связывания или вы можете импортировать определение библиотеки типов Outlook из файла MSOUTL.OLB. –

+0

У вас есть письменный пример, который вы можете поделиться? Я был бы очень признателен. Я бы только ссылался на него в образовательных целях. –

Смежные вопросы