RDS与ProgId及ClsId (7分)

  • 主题发起人 主题发起人 qdyoung
  • 开始时间 开始时间
Q

qdyoung

Unregistered / Unconfirmed
GUEST, unregistred user!
编译运行delphi的ado rds例子,
如果设置rdsconnection的computername为服务器名,
并把rdsclient拷贝到其它机器运行,那么需要先在客户机执行一次rdsserver,
否则总是提示“不能创建服务对象”。
我发现用tregsvr rdserver.tlb也不行,非得执行一次rdsserver,
研究com的源程序知道com server注册过程也就是在注册表加了些内容,
最后知道只要在客户端把以下内容导入注册表就可以运行rdsclient,
而不需要先运行一次rdsserver:
REGEDIT4
[HKEY_CLASSES_ROOT/RServer.RDSAppServer]
@="RDSAppServer Object"
[HKEY_CLASSES_ROOT/RServer.RDSAppServer/Clsid]
@="{3C464A23-1DB2-11D3-931D-00C04FB17A5E}"
当然rdsserver注册时在注册表里还加有其它内容,但这些对客户端不是必须的。
rdsconnection填写的那个servername是RServer.RDSAppServer,
即progid,那它在Connect时应该是通过注册表找到progid对应的clsid,
然后启动并调用服务器上相应的服务,或者应该可以这么理解,progid就像域名,
clsid就像ip地址,通过解析,实际访问时用的是ip地址——clsid,
那么能否像不需要域名只需要ip也能访问一样,能否只需要clsid,
不需要progid也能一样访问服务器rdsserver呢?这样客户端就不需要加注册表项,
不需要任何动作就可以直接运行。
能否设置rdsconnection的servername为clsid呢?这个可能不行,因为clsid类型为
TGUID,设为guid的字符串表示?
但是rdsconnection建立链接是直接调用的FDataSpace接口的方法
FAppServer := FDataSpace.CreateObject(ServerName, ComputerName);
恐怕无法传入clsid,
那真的没有办法让客户端不需要注册服务器而直接调用服务器端了吗?
这个问题恐怕很难,所以也就不浪费我的money了。
 
请那位进来加个注释拿分
 
可能分太少了吧:)
 
就是想找个人理一下好送分
非常感谢
 
后退
顶部