Regasm записывает mscoree.dll в ключ реестра InprocServer32 - PullRequest
5 голосов
/ 28 мая 2010

Когда я регистрирую свою сборку .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 Ответ

6 голосов
/ 31 мая 2010

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

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

...