Кнопки надстройки ленты COM Outlook не отвечают в корейском Outlook 2010
У меня есть надстройка COM Outlook, которая реализует кнопку ленты в Outlook 2010. Она довольно хорошо работает в течение достаточно долгого времени. Пока кто-то не пытался загрузить надстройку в корейской версии Outlook. Кнопки ленты отображаются, но ничего не делают при нажатии. В отладчике я вижу сообщение об ошибке ниже всякий раз, когда нажимаю на кнопку ленты "ОШИБКА: невозможно загрузить библиотеку типов. (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}};
1 ответ
Поиск библиотеки типов, на котором она терпит неудачу, является собственной библиотекой типов надстройки COM. ProcMon показывает корейский Outlook, пытающийся получить typelib от HKCR и терпящий неудачу. Нет причин, по которым он может потерпеть неудачу, я ясно вижу регистрацию в regedit под ключом HKCR.
Как я уже говорил, мой плагин установлен для текущего пользователя, поэтому все регистрации выполняются в "HKCU\Software\Classes".
Когда я взламываю запись реестра для моей библиотеки типов в "HKLM\Software\Classes", внезапно корейский Outlook находит все в порядке, и надстройка работает.
Когда плагин запускается, я просто хочу, чтобы он создал запись typelib под HKLM. Это хак, но я не знаю, что делает MS с Outlook на корейском (возможно, на других языках?) При поиске записей в HKCR.