0

我有一个 COM Outlook 插件,它在 Outlook 2010 中实现了一个功能区按钮。它已经运行了很长一段时间。直到有人试图在韩语版 Outlook 中加载插件。功能区按钮显示,但单击时不执行任何操作。在调试器中,每当我单击功能区按钮“错误:无法加载 Typelibrary。(HRESULT = 0x8002801d)验证 TypelibID 和使用 IDispatchImpl、CStockPropImpl、IProvideClassInfoImpl 或 IProvideCLassInfo2Impl 指定的主要版本”时,我都会看到下面的错误消息。

我从来没有在这个按钮的回调中达到我的断点,所以我认为我的代码上方的事件层发生了一些事情。但我不知道是什么,也不知道为什么使用韩文版的 Outlook 会有什么不同。有人有想法么?

我认为它与定义我的主插件支持的接口时使用的 LIBID_Office 宏有关:

, public IDispatchImpl<IRibbonExtensibility, 
     &__uuidof(IRibbonExtensibility), 
     &LIBID_Office, /* wMajor = */ 2, /* wMinor = */ 4>

宏定义为

extern "C" const GUID __declspec(selectany) LIBID_Office =
    {0x2df8d04c,0x5bfa,0x101b,{0xbd,0xe5,0x00,0xaa,0x00,0x44,0xde,0x52}};
4

1 回答 1

0

它失败的类型库查找是 COM 插件自己的类型库。ProcMon 显示韩国 Outlook 试图从 HKCR 获取类型库并失败。它没有理由失败,我可以在 HKCR 键下的 regedit 中清楚地看到注册。

正如我之前所说,我的插件是为当前用户安装的,所以所有注册都在“HKCU\Software\Classes”下完成。

当我在“HKLM\Software\Classes”下为我的 typelib 修改注册表项时,突然韩国 Outlook 发现一切正常并且插件工作正常。

当插件启动时,我将让它在 HKLM 下创建 typelib 条目。这是一个 hack,但我不知道在 HKCR 中查找条目时,MS 让 Outlook 用韩语(可能是其他语言?)做什么。

于 2010-11-04T14:51:56.003 回答