Regasm将mscoree.dll写入注册表项InprocServer32

时间:2010-05-28 09:43:01

标签: com registry com-interop regasm

当我使用regasm.exe注册我的.NET程序集时注册表项

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

设置为“mscoree.dll”。

但是,我试图模仿用C编写的现有COM服务器。当注册这个旧的COM服务器时,InprocServer32被设置为该组件的完整路径。

不幸的是,现有系统(我无法更改的插件主机)读取并使用此值 - “mscoree.dll”值会混淆。

我的解决方案可能是手动修补此注册表项 - 但我想了解为什么regasm将“mscoree.dll”写入InprocServer32。

1 个答案:

答案 0 :(得分:5)

解释很简单。当您在进程中使用本机(非托管)COM服务器时,它将被加载到使用者进程中,并且使用者进程直接调用其函数。

使用托管代码COM暴露的程序集,这无法轻松实现。在托管代码的情况下,需要执行托管/非托管交互的中间层。 mscoree.dll充当此中间层。因此,当加载消费者调用CoCreateInstance() mscoree.dll时,通过加载暴露于COM的程序集托管代码并将所有调用转发给后者来模拟COM服务器。