Кнопки надстройки COM Outlook не отвечают в корейском Outlook 2010 - PullRequest
0 голосов
/ 28 октября 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 Ответ

0 голосов
/ 04 ноября 2010

Поиск библиотеки типов, на котором он не работает, является собственной библиотекой типов надстройки COM.ProcMon показывает корейский Outlook, пытающийся получить typelib от HKCR и терпящий неудачу.Нет никаких причин, по которым он может потерпеть неудачу, я ясно вижу регистрацию в regedit под ключом HKCR.

Как я уже говорил, мой плагин установлен для текущего пользователя, поэтому все регистрации выполняются в "HKCU \ Software\ Classes».

Когда я взламываю запись реестра для моей библиотеки типов в "HKLM \ Software \ Classes", внезапно корейский Outlook находит все в порядке, и надстройка работает.

Когда надстройка запустится, я просто заставлю ее создать запись typelib под HKLM.Это хак, но я не знаю, что делает MS с Outlook на корейском (возможно, на других языках?) При поиске записей в HKCR.

...