COM Outlook加载项功能区按钮在韩国Outlook 2010中没有响应

COM Outlook加载项功能区按钮在韩国Outlook 2010中没有响应,com,outlook-addin,outlook-object-model,typelib,Com,Outlook Addin,Outlook Object Model,Typelib,我有一个COM Outlook加载项,它在Outlook 2010中实现了一个功能区按钮。很长一段时间以来,它一直运转良好。直到有人试图在韩国版Outlook中加载加载项。单击时,功能区按钮会显示,但不会执行任何操作。在调试器中,每当单击功能区按钮“错误:无法加载Typelibrary”(HRESULT=0x8002801d)时,我都会看到下面的错误消息 验证指定的TypelibID和主版本 IDispatchImpl、CStockPropImpl、IProvideClassInfoImpl或I

我有一个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>

它失败的typelib查找是COM加载项自己的typelib。ProcMon显示Korean Outlook试图从HKCR获取typelib,但失败。没有理由失败,我可以在HKCR密钥下的regedit中清楚地看到注册

如前所述,我的加载项是为当前用户安装的,因此所有注册都在“HKCU\Software\Classes”下完成

当我在“HKLM\Software\Classes”下为我的typelib输入一个注册表项时,韩国人Outlook突然发现一切正常,加载项工作正常


当加载项启动时,我将让它在HKLM下创建typelib条目。这是一个黑客程序,但我不知道微软在HKCR中查找条目时让Outlook用韩语(可能是其他语言?)做了什么。

奇怪的是,如果我在regsvr32中注册我的加载项,那么韩语的一切都很好。regsvr32正在向HKLM注册内容。我自己的安装程序将这些类注册到香港大学。但是当我这样做的时候,由于某种原因,类型库没有被找到。错误:无法加载类型库。(HRESULT=0x8002801d)验证使用IDispatchImpl、CStockPropImpl、IProvideClassInfoImpl或IProvideClassInfo2Impl指定的TypelibID和主版本这听起来好像与UAC和注册表虚拟化有冲突。这发生在关闭UAC的Vista框上。我不知道为什么我只在韩国人的观点上有问题,而不是英语(我已经证实了)。
extern "C" const GUID __declspec(selectany) LIBID_Office =
    {0x2df8d04c,0x5bfa,0x101b,{0xbd,0xe5,0x00,0xaa,0x00,0x44,0xde,0x52}};