创建一个基本的、不受管理的 Outlook/Office 插件
Creating a Bare Bones, Unmanaged Outlook/Office Addin
3/3/16
我想使用 C++ 为 Microsoft Outlook/Office 编写一个纯粹的、基本的、非托管的 COM 插件。 Visual Studio 强制您使用活动模板库并隐藏主机 (Outlook) 如何连接到插件的所有基本实现。以下是我目前所知道的一些背景知识:
我知道 COM 的基本原理及其工作原理。根据我对体系结构的理解,我得出结论,既然 Outlook 是在 COM 之上编写的,那么我当然应该能够查询它的接口并操作应用程序。
我知道我需要使用 IDTExtensibility2 接口来连接办公应用程序。有谁知道这个接口定义所在的 header 文件的名称?
我知道我需要在注册表中注册插件。这是一个 COM 服务器,所以这是预期的。
除了这些点,我迷路了。我需要知道第 1 步。任何人都可以提供任何类型的参考或一些代码吗?
郑重声明,我不想使用 VS,因为我想知道如何从头开始创建插件。我想知道需要哪些组件,而不是包中提供的组件。
编辑 2016 年 3 月 4 日
所以我在 MSDN 上偶然发现了这个 link:
https://msdn.microsoft.com/en-us/library/office/ff867268.aspx
我不确定我是如何错过它的,但它看起来是一个很好的起点。我想我唯一挂断电话的是 headers 要使用的内容。这可能是我必须进行的一次冒险,以找出一个简单的骨骼插件需要哪些。我会做一些研究并反馈给这个线程。
- 是的。
- 有关 IDTExtensibility2 接口定义,请参阅 _IDTExtensibility2, what DLL to import into ATL project?
- 是的。请记住,有一些特定于 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;
3/3/16
我想使用 C++ 为 Microsoft Outlook/Office 编写一个纯粹的、基本的、非托管的 COM 插件。 Visual Studio 强制您使用活动模板库并隐藏主机 (Outlook) 如何连接到插件的所有基本实现。以下是我目前所知道的一些背景知识:
我知道 COM 的基本原理及其工作原理。根据我对体系结构的理解,我得出结论,既然 Outlook 是在 COM 之上编写的,那么我当然应该能够查询它的接口并操作应用程序。
我知道我需要使用 IDTExtensibility2 接口来连接办公应用程序。有谁知道这个接口定义所在的 header 文件的名称?
我知道我需要在注册表中注册插件。这是一个 COM 服务器,所以这是预期的。
除了这些点,我迷路了。我需要知道第 1 步。任何人都可以提供任何类型的参考或一些代码吗?
郑重声明,我不想使用 VS,因为我想知道如何从头开始创建插件。我想知道需要哪些组件,而不是包中提供的组件。
编辑 2016 年 3 月 4 日
所以我在 MSDN 上偶然发现了这个 link:
https://msdn.microsoft.com/en-us/library/office/ff867268.aspx
我不确定我是如何错过它的,但它看起来是一个很好的起点。我想我唯一挂断电话的是 headers 要使用的内容。这可能是我必须进行的一次冒险,以找出一个简单的骨骼插件需要哪些。我会做一些研究并反馈给这个线程。
- 是的。
- 有关 IDTExtensibility2 接口定义,请参阅 _IDTExtensibility2, what DLL to import into ATL project?
- 是的。请记住,有一些特定于 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;