如何正确地为 Office COM 加载项实现 IDTEXtensibility2 接口?

2024-02-28

我正在为 Outlook 实施 COM 加载项。我使用 IDTEXtensibility2。我不确定这是否是执行 COM 加载项的最佳方式,但我无法更改它。

该接口定义了五个方法:OnConnection、OnStartupComplete、OnAddInsUpdate、OnBeginShutdown、OnDisconnection。

我需要执行以下操作:

  1. 从文件加载配置数据
  2. 加载注册表数据
  3. 开始新会话
  4. 创建 *.pst 文件
  5. 订阅资源管理器事件
  6. 连接到 Internet 服务器以获取一些数据
  7. 在主菜单中创建菜单项
  8. 创建工具栏
  9. 在 Outlook 中添加/删除多项内容(在 *.pst 文件级别)

请指教,我什么时候应该做什么?

  • 我需要在 OnConnection 方法中执行什么?
  • 仅当 OnStartupComplete 调用时才允许什么?
  • 在 OnBeginShutdown / OnDisconnection 期间我需要释放处置哪些资源?

请注意,1,2 和 6 不是 Outlook 插件特定的任务。

3 是不需要的:作为一个插件,你不需要创建一个会话 - 你可以与一个现有的会话连接(通过实现OnConnection方法)。

对于 4 和 9,我建议使用 RDO:http://dimastr.com/redemption/ http://dimastr.com/redemption/(如果您确实需要另一次会议,也可以使用 3 次)

对于 5,7 和 8,我建议使用 ADX:http://www.add-in-express.com/add-in-net/ http://www.add-in-express.com/add-in-net/
(你实际上不必担心IDTExtensibility2如果你这样做的话,就再也不会了)

OnConnection是您获取参考的地方Application您可以从中导出其他所有内容的接口。

OnStartupComplete是您可以放置​​所有初始化代码的地方。

OnDisconnection是您应该释放会话期间可能积累的所有剩余 OOM 引用的位置,即从初始值派生的所有内容Application您通过以下方式收到的参考资料OnConnection.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确地为 Office COM 加载项实现 IDTEXtensibility2 接口? 的相关文章

  • 设置 TextBlock 以保留开头和结尾的空白?

    EDIT 下面的代码实际上按照我想要的方式工作 这个问题有点误导 请忽略它 通常当我设置Text的财产TextBlock像这样 TextBlock tb new TextBlock tb Text Hello World 文本开头和结尾的空
  • 反序列化 DateOnly

    我有一条正在尝试反序列化的记录 public record MementoTimeEntry Guid Id Guid ActivityId string UserId string Title TimeOnly StartTime Tim
  • 如何在没有 WebBrowser 控件的情况下“呈现”HTML

    首先 我不知道 渲染 是否是正确的词 我喜欢从网站获取信息 因此 目前我使用 WebBbrowser 控件 现在我喜欢使用 HttpWebRequests 因为我认为这样更快 并且可以更轻松地使用线程 但我无法使用它们 因为我从 HttpW
  • 在源代码管理中管理我的数据库

    由于我正在处理一个新的数据库项目 在 VS2008 中 而且我从未从头开始开发数据库 因此我立即开始研究如何在源代码管理 在本例中为 Subversion 中管理数据库 我找到了一些关于SO的信息 包括这篇文章 保持多个环境中的开发数据库同
  • 如何使用 Serilog ForContext

    我是 Serilog 新手 很难弄清楚如何使用上下文功能 当我运行下面的代码时 输 出文件不包含报告 ID 我缺少什么想法吗 var logger new LoggerConfiguration WriteTo File C Log txt
  • 为什么 GridView Rowupdating 事件不捕获文本框的新值?

    我正在使用网格视图 当我单击编辑按钮时 会出现更新和取消按钮 修改来自 EditItemTemplate 的文本框中的值后 新值不会显示在事件处理程序 rowupdating 中 而是获取渲染页面时出现的值 如何从这些文本框中获取新值并进一
  • “System.Int32”类型的表达式不能用于返回类型“System.Object”

    我正在尝试制作一个简单的脚本系统 用于打印标签 我过去曾通过反射完成此操作 没有任何问题 但我现在尝试使用 Lambda 函数来完成此操作 以便可以缓存函数以供重用 到目前为止我的代码如下 public static string GetV
  • 登录方式使用GINA定制

    我知道在 GINA 中找到大师并不容易 但我的问题最接近进程间通信 IPC 我用非托管 c 编写了我的自定义 GINA 我在其中包含了一个方法来检查用户尝试的指纹的有效性为了登录 该函数将调用正在运行的系统Windows服务中用C 编写的一
  • 提供软件设置的最佳方式?

    我正在使用 C NET 在我的软件中 我提供设置对话框 用户可以通过该对话框设置我想要保存到文件的应用程序设置 要求 典型 我定义的每个类都使用这些设置的某些部分 因此 这些对于所有类都应该是全局的 这些应该在软件启动时加载 当用户更改设置
  • 如何嘲笑一切?

    我了解如何模拟接口或虚拟方法调用 但是像 TypeMock 这样的框架可以模拟框架中的所有内容 使用哪些 NET机制来提供此类功能 例如 Typemock Isolator 使用 CLR分析器API http msdn microsoft
  • 在分布式事务中手动登记后,使用 enlist=false 的连接不会关闭

    我有一个分布式事务上下文使用ServiceDomain 在其中 我打开一个 SQL 连接 其中连接字符串指定Enlist false 这样它就不是自动地被纳入交易 然后 如果我使用手动在分布式事务中登记连接EnlistDistributed
  • 是否可以在对Where 的调用中调用命名方法?

    我试图从 RedGate 的这本免费电子书中了解 Linq 的一些性能影响ftp support red gate com ebooks under the hood of net memory management part1 pdf f
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js
  • 如何使用字符串参数来区分命名空间或类型?

    我需要在 NET 2 0 C 脚本中获取一些 JSON 输出 目标是使用一种方法来输出我需要的所有 JSON 提要 所有模型都具有相同的 id 和 name 属性 因此我有大约 15 个命名空间 它们在这里具有相同的部分 简而言之 因为我使
  • Microsoft Visual Studio 安装程序项目 - 如何向使用 Process.Start() 执行但没有修复选项的 MSI 提供重新启动提示

    问题如下 我在 MSI 卸载之前调用了自定义卸载程序 正确关闭我的应用程序后 它会调用msiexec使用 Windows Installer 卸载 MSI 这是通过执行 msiexec x PRODUCT CODE promptrestar
  • .NET 中的线程中止

    我有一个线程正在分析文件并对数据库进行事务调用 每个事务都有一个审计条目作为其事务的一部分 调用 Thread Abort 来停止文件的处理有什么大问题吗 而不是到处散布丑陋的安全点 文件将在 Abort 调用后关闭 明显的问题是放弃交易的
  • 当移动到控件的 ScrollBar 上时触发 MouseLeave 事件

    由于无法解决问题 我重新发布此问题 原始here https stackoverflow com questions 2024393 treeview mouseleave event fires when moves over scrol
  • File.Exists("") 和 FileInfo 存在有什么区别

    我在 Program Files x86 MyApp 文件夹中有一个 exe 文件 在 x86 应用程序中 我检查文件是否存在 64 位系统 简单的 bool fileExists File Exists ProgramFiles x86
  • 将包含多个事件的 ICS 文件保存到我的日历,而不是其他日历

    当我将 Excel 电子表格转换为 CSV 文件时 然后将 CSV 文件转换为 ICS 文件 我可以打开其中包含单个事件的 ICS 文件 并接受会议邀请 然后将其添加到我的日历中 使用此应用程序进行转换 http icsconverterw
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最

随机推荐

  • 查找表中的重复行[重复]

    这个问题在这里已经有答案了 我有一个带有这样的表的小型应用程序 tr td img class DeleteButton alt delete src images delete icon png td td class toHide so
  • 如何删除mysql表中的数字字符?

    我有一张桌子 名称为 Actress 在 MySQL 中 我想从列 中删除所有数字字符name select from Actress limit 5 code name 11455 Hanshika Motwani 19 11457 Ka
  • memcached 是否在 Google App Engine 中跨服务器共享?

    在memcached网站上 它说memcached是一个分布式内存缓存 这意味着它可以跨多个服务器运行并保持某种一致性 当我在谷歌应用程序引擎中发出请求时 同一实体组中的请求很可能由同一服务器提供服务 我的问题是 假设有两台服务器为我的请求
  • 为什么 GLSL 的算术函数在 iPad 上与在模拟器上产生如此不同的结果?

    我目前正在寻找在 iOS 设备上运行的 OpenGL ES 2 0 片段着色器代码中的一些错误 代码在模拟器中运行良好 但在 iPad 上它存在巨大问题 并且某些计算产生截然不同的结果 例如我有0 0在 iPad 上和4013 17在模拟器
  • 将 csv 附加到电子邮件 xcode

    我在电子邮件视图中收到了一个有效的 csv 附件 问题是 当我在 iPhone 上打开 csv 时 它会将文件很好地显示在单独的列中 但如果我用 Excel 打开它 它就全部在一个字段中 我需要两列 我该怎么做 尝试用逗号分隔字段 但这不起
  • IPv4 到十进制不同的值?

    为什么 inet pton 和 inet addr 1734763876 的 IPv4 十进制值与使用这 2 个网站 1684366951 得到的值不同 struct sockaddr in sin inet pton AF INET 10
  • Java 类文件的创建是确定性的吗?

    当使用same JDK 即相同的javac可执行文件 生成的类文件总是相同的吗 是否会有差异 具体取决于操作系统 or hardware 除了JDK版本之外 是否还有其他因素导致差异 是否有任何编译器选项可以避免差异 差异仅可能存在于理论上
  • 查找 Active Directory 中特定用户所属的组/分发列表

    假设我在 OU Groups DC contaco DC com ct 我可以找到子 OU 中的所有组 但找到用户 bobdole 所属的所有组的唯一方法是查看每个组 看看他是否在 成员 字段中 不幸的是 当我查看用户 bobdole 时
  • 如何使div的宽度在两个div之间拉伸

    我当前的问题是我有三个 div 元素 一只向左漂浮 一只向右漂浮 一只在两者之间 我希望中心 div 自动拉伸到两个 div 之间可用宽度的最大宽度 HTML div div 1 div div div div 2 div div CSS
  • 控制何时调用静态构造函数

    在我的自定义属性的静态构造函数中 我在加载的程序集中搜索用我的属性修饰的所有类 并对它们执行一些操作 我希望在运行时尽快调用静态构造函数 最好是在执行之前static void Main 入口点 目前 只有在我对属性进行一些调用后才会调用它
  • 是否可以对 jQuery UI 对话框小部件的显示/隐藏方法进行更精细的控制?

    目前 在使用对话框小部件时 我似乎只能以最基本的形式使用效果 例如 以下将使用放置效果来显示和隐藏对话框 dialog dialog show drop hide drop 但是 drop 方法的默认值始终落在左侧 我真正想要的是让它下降到
  • spring security方法级注解应该应用在controller层还是service层?

    我一直在我的控制器方法上使用 Spring Security 和 PreAuthorize 我的理由是 我希望授权检查能够在一层中以可预测的方式进行 并且在请求中尽早进行 但是 我刚刚阅读了 spring security 3 文档 看到他
  • 遍历n*n矩阵的c程序

    我们有一个 n n 矩阵 例如我们取 n 4 矩阵如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 我们必须按顺序遍历它 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 我怎样
  • IOS Coredata UNIQUE 约束失败:

    我正在尝试将数据插入 coredata 但出现错误 例如 CoreData 错误 1555 唯一约束失败 ZSIDETABLENAME Z PK 设想 首先 从 appdelegate m 我将数据从 SQL 文件复制到文档目录的 sql
  • 如何从HWND获取窗口类名和ID?

    如何从HWND获取窗口类名和ID 我搜索了一下 但发现相反的更受欢迎 有什么想法吗 回答者Andreas https stackoverflow com questions 3246663 how to get the window cla
  • Android 屏幕关闭时识别音量按钮按下

    我试图识别用户何时在屏幕关闭时按下音量键来更新活动 根据我的阅读 广播接收器 我认为 在手机睡眠时不起作用 因此唯一的方法是使用 PARTIAL WAKE LOCK 保持活动运行 我的应用程序是一个基本应用程序 不应该使用太多电池 但我担心
  • 禁用 Highcharts 中的 PDF 和 SVG 下载选项

    我在我的 Web 应用程序中使用 Highcharts v4 0 3 和 exporting js 并且我希望能够为最终用户提供以下下载选项 下载 JPG 格式的图表 下载 PNG 图表 但是 标准选项是 打印图表 下载 JPG 格式的图表
  • 使用 font Awesome 和 css 自定义复选框

    我正在制作一个带有 font Awesome 和 css 的自定义复选框 单击 选中复选框时 我尝试在黑色复选框周围创建一些填充 选中 单击时在白色框中有一个较小的黑色框 import url netdna bootstrapcdn com
  • 处理 float() 函数

    首先 是这个功能 https processing org reference floatconvert html特殊处理还是默认存在于java中 当我在处理下面的行时编码时 println float 88 t float 88 n t
  • 如何正确地为 Office COM 加载项实现 IDTEXtensibility2 接口?

    我正在为 Outlook 实施 COM 加载项 我使用 IDTEXtensibility2 我不确定这是否是执行 COM 加载项的最佳方式 但我无法更改它 该接口定义了五个方法 OnConnection OnStartupComplete