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