0

2016 年 3 月 3 日

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

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

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

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

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

作为记录,我不想使用 VS,因为我想知道如何从头开始创建插件。我想知道需要哪些组件,而不是包中提供的内容。

编辑 3/4/16

所以我偶然发现了 MSDN 上的这个链接:

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

我不知道我是怎么错过的,但它看起来是一个很好的起点。我想我唯一的挂断是使用什么标题。这可能是一次冒险,我必须冒险找出裸骨插件需要哪些。我会做一些研究并报告回这个线程。

4

1 回答 1

0
  1. 是的。
  2. 请参阅_IDTExtensibility2,将什么 DLL 导入 ATL 项目?对于 IDTExtensibility2 接口定义
  3. 是的。请记住,有一些 Outlook 特定的键可以让 Outlook 加载您的插件HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins

这是 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;

于 2016-03-03T22:33:09.620 回答