Regasm записывает mscoree.dll в ключ реестра InprocServer32

Когда я регистрирую свою сборку.NET с помощью regasm.exe, ключ реестра

HKEY_CLASSES_ROOT\CLSID{111E32AD-4BF8-495F-AB4D-6C61BD463EA4}\InprocServer32

установлен на "mscoree.dll".

Тем не менее, я пытаюсь имитировать существующий COM-сервер, который был написан на C. При регистрации этого старого COM-сервера InprocServer32 установлен полный путь к этому компоненту.

К сожалению, существующая система (хост-плагин, который я не могу изменить) считывает и использует это значение - что смущает значение "mscoree.dll".

Мое решение может состоять в том, чтобы исправить эту запись реестра вручную, но я хотел бы понять, почему regasm записывает "mscoree.dll" в InprocServer32 .

1 ответ

Решение

Объяснение довольно простое. Когда вы используете собственный (неуправляемый) COM-сервер in-proc, он загружается в потребительский процесс, и потребительский процесс напрямую вызывает его функции.

Это не может так легко работать с управляемым кодом сборки COM. В случае управляемого кода необходим промежуточный уровень, который выполняет управляемое / неуправляемое взаимодействие. mscoree.dll действует как этот промежуточный слой. Поэтому, когда потребитель звонит CoCreateInstance()mscoree.dll загружается и эмулирует COM-сервер путем загрузки кода, управляемого COM-сборкой, и переадресации всех вызовов на последний.

Другие вопросы по тегам