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-сборкой, и переадресации всех вызовов на последний.