Ситуация следующая:
Есть 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? Буду благодарен даже за полезные ссылки
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не получается корректно разделить строку с Proxy на IP и Port
Есть скаченный csv файл объемом 1,5 гигабайтаВ нем содержится примерно 120 000 000 строк в формате xxxx,yyyyyy