Использование x86 COM в x64 приложении

120
16 октября 2019, 01:50

Ситуация следующая:

  • Есть x86 com api стороннего разработчика, доступа к исходному коду которого нет;

  • Есть x64 приложение, из которого необходимо использовать это COM.

    При использовании объектов из COM получаем очевидную ошибку.

    "Не удалось получить фабрику класса COM для компонента с CLSID {AB8A48D1-C100-47AB-BDEE-4E2CB1619C1A} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))."

Следовательно, нам необходимо зарегистрировать типы при помощи RegAsm.exe и проксировать их вызовы через COM Surrogate (путём создания записей в реестре), либо создать COM+ приложение в "Службы компонентов", добавив туда необходимые компоненты. Подробнее об этих подходах можно почитать по этим ссылкам:

64-Bit-Insider

Запуск x32 COM-объектов из x64 приложения

После данных процедур (для меня сработали оба способа) типы успешно создаются, однако при вызове одного из методов COM, который должен отрисовать UI, COM+ приложение падает с сообщением "Прекращена работа программы Surrogate COM".. При этом возвращая исключение, которое ничего мне не говорит:

Сбой при удаленном вызове процедуры. (Исключение из HRESULT: 0x800706BE)

Из под x86 приложения данный метод из COM нормально вызывается и UI отрисовывается. В чём может быть проблема? И знает ли кто-нибудь ещё способы вызова x86 com из x64? Возможно, тут стоит как-то использовать shared memory? Буду благодарен даже за полезные ссылки

READ ALSO
Можно ли повесить несколько хуков?

Можно ли повесить несколько хуков?

Есть LowLevelKeyboardHook - (клавиатурный хук)

96
C# Split как правильно разделить прокси на IP и Port

C# Split как правильно разделить прокси на IP и Port

Не получается корректно разделить строку с Proxy на IP и Port

233
Сборка муссора в C#

Сборка муссора в C#

изучаю сборку мусора в C#Узнал что сборка происходит в три этапа

90
Работа с файлами большого объема C#

Работа с файлами большого объема C#

Есть скаченный csv файл объемом 1,5 гигабайтаВ нем содержится примерно 120 000 000 строк в формате xxxx,yyyyyy

108