中间层分发问题,Com/DCom/三层高手请进。 ( 积分: 100 )

  • 主题发起人 主题发起人 lichaogang
  • 开始时间 开始时间
L

lichaogang

Unregistered / Unconfirmed
GUEST, unregistred user!
以MTS实现了中间层后后,Delphi会产生XXXTLB.pas文件,这样就可以在编写客户端程序时使用,对于客户端的编程工作带来好处,另外也可以实现前期邦定,能提高效率。
问题:在客户端运行程序时,需要注册TLB文件(比如用TRegsvr),这样客户端程序才能正确访问中间层,但由于某种原因导致在客户端注册TLB不可能(比如说权限,一般用户不可以写注册表),但不注册则会出现interface not supported错误。
希望解法:直接通过分发TLB文件,如将TLB文件放置到所有人都可以访问的位置,不通过注册表加载TLB,实现对于中间层的访问。
 
以MTS实现了中间层后后,Delphi会产生XXXTLB.pas文件,这样就可以在编写客户端程序时使用,对于客户端的编程工作带来好处,另外也可以实现前期邦定,能提高效率。
问题:在客户端运行程序时,需要注册TLB文件(比如用TRegsvr),这样客户端程序才能正确访问中间层,但由于某种原因导致在客户端注册TLB不可能(比如说权限,一般用户不可以写注册表),但不注册则会出现interface not supported错误。
希望解法:直接通过分发TLB文件,如将TLB文件放置到所有人都可以访问的位置,不通过注册表加载TLB,实现对于中间层的访问。
 
1、通过tlb取得CoClass的Guid
2、CreateRemoteComObject(MachineName, ClassID) as Ixxx
 
客户端是不需要注册TLB的
如果你采用 DCOMConnection连接,客户端登录的用户名需要在应用服务器上预先建立(密码也要一致);
如果采用SocketConnection连接,服务段需要运行ScktSrvr.exe(C:/Program Files/Borland/Delphi7/Bin);
如果采用WebConnection方式连接,服务器上需配置IIS
 
to bruce.xm:
不行啊,出现Interface not supported。我并不是取得不了GUID,这个值可以很容易得到,从XXTLB.pas文件中即可得到的。只是中间层所产生的TLB文件不在客户端注册的话,在客户没有“中间层代理啊”。
to xianguo:
我是应用CreateRemoteComObject方式来连接中间层的啊,没有用现成的连接方式。
 
这是微软的COM的机制,客户端不通过注册表注册COM就要问微软是不是可以了。
 
to jennykiller:
是啊,最好是问MS!
将组件的TLB文件注册到客户端,事实上也就是向注册表中写了一个GUID及其它一些信息,如TLB文件的位置等。
MS提供了两个函数,分别是LoadTypeLib和LoadRegTypeLib,一个是从文件中读取TLB,另一个则是从注册表中读取TLB信息,所以我就在想,是否有一种方法可以不从注册表中读取,而直接从TLB文件中得到所需的信息呢?
 
并不需要注册,不过你不能使用Delphi对COM支持的做法
 
to Bruce.xm:
你是说在客户不使用XXTLB.pas文件,用Olevariant来创建中间层对象进行后期邦定吗?
请详细说明。
 
看来真的要去问MS了。
试想一下MS的MTS宿主程序是通过Reg来找到对应的组件信息并加载进而进行远程调用的,为什么一定要用注册表呢?这真要问一下MS了。
 
后退
顶部