创建一个基本的、不受管理的 Outlook/Office 插件

Creating a Bare Bones, Unmanaged Outlook/Office Addin

3/3/16

我想使用 C++ 为 Microsoft Outlook/Office 编写一个纯粹的、基本的、非托管的 COM 插件。 Visual Studio 强制您使用活动模板库并隐藏主机 (Outlook) 如何连接到插件的所有基本实现。以下是我目前所知道的一些背景知识:

  1. 我知道 COM 的基本原理及其工作原理。根据我对体系结构的理解,我得出结论,既然 Outlook 是在 COM 之上编写的,那么我当然应该能够查询它的接口并操作应用程序。

  2. 我知道我需要使用 IDTExtensibility2 接口来连接办公应用程序。有谁知道这个接口定义所在的 header 文件的名称?

  3. 我知道我需要在注册表中注册插件。这是一个 COM 服务器,所以这是预期的。

除了这些点,我迷路了。我需要知道第 1 步。任何人都可以提供任何类型的参考或一些代码吗?

郑重声明,我不想使用 VS,因为我想知道如何从头开始创建插件。我想知道需要哪些组件,而不是包中提供的组件。

编辑 2016 年 3 月 4 日

所以我在 MSDN 上偶然发现了这个 link:

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

我不确定我是如何错过它的,但它看起来是一个很好的起点。我想我唯一挂断电话的是 headers 要使用的内容。这可能是我必须进行的一次冒险,以找出一个简单的骨骼插件需要哪些。我会做一些研究并反馈给这个线程。

  1. 是的。
  2. 有关 IDTExtensibility2 接口定义,请参阅 _IDTExtensibility2, what DLL to import into ATL project?
  3. 是的。请记住,有一些特定于 Outlook 的键可以让 Outlook 在 HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins
  4. 中加载您的插件

这是 IDTExtensibility2 接口的 Delphi 定义: // *********************************************************************// // 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;