Проблема Регистрация сборок x64 для COM-взаимодействия - PullRequest
2 голосов
/ 18 ноября 2011

Я разработал пример c # COM-Visible DLL.
Встроенный в x86 и зарегистрированный через 32-разрядный Regasm, он хорошо работает на COM-клиенте.
Встроенный в x64 и зарегистрированный через 64-разрядный Regasm,При вызове COM-клиента сбрасывается следующая ошибка:

Retrieving the COM class factory for component with CLSID {A0F2F58F-7B98-3605-BEC9-84724FF1E824} failed due to the following error: 80040154.

Я проверил и убедился, что CLSID действительно присутствует в реестре в разделе HKCR \ CLSID.

Ниже приведен пример имитации COM-доступачерез c #:

var type = Type.GetTypeFromProgID("ProgID.Interop.5683");
var obj = Activator.CreateInstance(type); // <-- blows here

Я также проверил через procmon, что есть успешный доступ к типу через progId. Вопрос в том, где именно выглядит Активатор?и как заставить его "видеть" мою зарегистрированную сборку x64?мне нужно что-то добавить?

Я нашел много «решений», рекомендующих перестройку x86.Но приходи!Я не собираюсь этого делать и потеряю все преимущества x64 только ради COM.Есть ли РЕАЛЬНОЕ решение для этого?

1 Ответ

0 голосов
/ 19 ноября 2011

После ночного сна и небольшого оглядки назад я понял, что Активатор нужно вызывать из приложения x64, чтобы найти CLSID x64, просматривая местоположения x64 в Реестре. то есть при вызове из приложения x86 Activaor ищет CLSID в расположении x86 в реестре и последующий ключ, включая кодовую базу.

var type = Type.GetTypeFromProgID("ProgID.Interop.5683");
var obj = Activator.CreateInstance(type); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...