客户程序访问OLE/Automation的问题(100分)

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

lytime

Unregistered / Unconfirmed
GUEST, unregistred user!
客户程序访问Automation Object时必需在文件夹中
加入该Automation Object的project_tlb.dcu才能运行吗?
如果这样,多客户访问时,是否每个客户程序都要copy
一个project_tlb.dcu。
 
只是编译的时候需要DCU,EXE以后就不用了,所以也不妨碍你发布。
因为Com形式是DLL因此TLB只是提供一个虚函数表,因此即使
S端改了,重要函数名和入口参数不变即可和C端兼容。
 
多谢Crane的热心回答,但有一点我还是不明白,
您说的‘编译的时候需要DCU,EXE以后就不用了’想必
指的是客户端程序,而我发布的只是server端,在用户
使用该server编写客户程序的时候还要copy一个dcu吗?
 
当然不需要了,只要Server端可以正常运行并且已经注册到系统中即可。
另外如果用户没有详细的Server端资料,使用tlb文件作为接口参考也是可以的。
但最好和Server端同时发布详细的接口说明,养成良好的合作习惯。
 
胆子大一些,发布,凡是dcu都可以不要的!
 
OLE/Automation的调用方式很多,即便是编译时也可以不要tlb文件。
用Variant调用试试。简单点用DCOMConnect组件.
 
多谢redcat、crane and fencer的指点。
但难道客户在建立程序的时候不用 uses server_tlb 吗?
可能是我注册有误?注册要注意些什么?
小弟驽钝,还望各位高手启蒙。
 
客户建立时确实可以不用tlb文件,也可以用就看你的调用方式了。
注册服务器只要在机器上运行一个就可以了。如果是Dll可以用
tregsvr.exe来注册。注册完在注册表搜一下progid如果能找到
就是注册上了。
 
我做的不是DLL,是一个out of process 的
自动化服务器,依各位指点,我已正常注册过,但当
编写调用该服务器的客户程序时,如不 use server_tlb,
那么以如下方式调用:
var
lyy:Icomserver;

procedure TForm1.FormCreate(Sender: TObject);
begin
lyy:=Cocomserver.Create;
end;
将不认该接口。
百思不得其解,望各位指点。
 
如果这样Create当然需要use TLB文件,不然那里来的接口啊?
但是use归use,只要编译连接成EXE,TLB就不再需要了.
你可以看看TLB的内容,其中有对Icomserver的声明.
但声明只是提供接口虚函数,是函数在服务端.
老大,你还是得以看书为本啊.:)
 
谢谢Crane,我从书上看调用服务器的方法有三种:
接口
调度接口
OLeVariant
用后两种方法可以不用uses server_tlb,但书上
认为(delphi4 开发大全)variant性能较差,方法
1性能最好,所以我在调用服务器时采用方法1,但又不
得不uses server_tlb.
不知各位说的不需TLB的调用方法是哪一种,能否给
出简单代码,不胜感激。
 
事隔这么长时间了,相信你已经很清楚了:
你说的三种方式
接口 -- Early Binding
调度接口 -- Dispatched Table
OLeVariant -- Lately Binding
最后一种可以不用uses server_tlb(在编码时), 前两种
都需要. 但最后一种效率最差
第一种最快, 但是客户端必须注册服务端, 发布起来
不方便
中间一种方式效率局中,且客户端不用注册,我常用它
 
多人接受答案了。
 
后退
顶部