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.

5
задан Stiefel 28 May 2010 в 09:43
поделиться

1 ответ

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

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

6
ответ дан 14 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: