如何配置注册表使COM转化为DCOM运行

guo 2000-03-03 08:49:00
我发现简单地通过Dcomcnfg.exe程序不能使COM转化成DCOM运行,而且该程序只能修改EXE类型的COM组件.请各位帮帮忙!
...全文
263 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
guo 2000-03-04
  • 打赏
  • 举报
回复
向netmare致谢,虽然我没有来的及试,但感觉使用你的方法,问题应该能解决。
对dllhost.exe程序我非常生熟,我的机子中好象没有,请作说明,随后我将剩余分数一并送上。
guo 2000-03-04
  • 打赏
  • 举报
回复
感谢!感谢!netmare,我刚刚找到了这个程序。从日期看它应该是Service Pack3的。
佩服,好,仅以80分表示感谢.
netmare 2000-03-04
  • 打赏
  • 举报
回复
win98下dllhost.exe在你的$WINDOWSDIR\system下,但我不知道是不是因为我装了vs98才有的.nt从servie pack2才开始支持代理,而dllhost.exe是系统为此提供的缺省代理程序,在早期nt下远程服务器必须是exe型的,当然也就没有dllhost.exe了.我在nt(干净的nt除了sp6和option pack4外没装其他东西)下试过把我以前作的一个dll组件用以上述配置作为DCOM Remote Server,然后在win98下运行客户端程序(用CoCreteInstance创建对象),组件可以正常的在nt上被创建和调用,所以nt+spx x>=2就可以了.
dllhost.exe才24k,你要是实在没有,我可以mail一个给你.
netmare 2000-03-03
  • 打赏
  • 举报
回复
如果你的COM组件是dll型的进程内服务器,在服务器端的注册表中加入
[HKEY_CLASS_ROOT\AppID\{ur guid}]="inprocess"
[HKEY_CLASS_ROOT\AppID\{ur guid}]
DllSurrogate=""
[HKEY_CLASS_ROOT\CLSID\{ur guid}]
AppID={ur guid}
在客户端的注册表中加入
[HKEY_CLASS_ROOT\AppID\{ur guid}]
RemoteServer="ur server name"
[HKEY_CLASS_ROOT\CLSID\{ur guid}]
AppID={ur guid}

这样当你CoCreateInstance时,服务器端会通过缺省代理DllHost.exe来DllGetObject你的dll,你也可以不用DllHost.exe,通过在DllSurrogate项中指定你的代理,但定制代理较麻烦,要实现ISurrogate,且代理程序要用CoRegisterSurrogte来注册自己.
在客户端要必须注意注册表中CLSID下不能有InprocServer32和LocalServer32的设置,否则CoCreateInstance时会忽略掉注册表中AppID下的RemoteServer的设置,而在本机上请求对象.
如果用CoCreateInstanceEx,指定用CTX_REMOTE_SERVER,COSERVERINFO中指定主机名,这样就可以在远地运行了,且这样的效率比用CoCreateInstance高,因为CoCreateInstanceEx可以一次请求多个接口,省去了多趟通信.

6,849

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧