会者不难,COM接口怎样在客户端调用? ( 积分: 100 )

  • 主题发起人 主题发起人 sixeight
  • 开始时间 开始时间
S

sixeight

Unregistered / Unconfirmed
GUEST, unregistred user!
这几天看了一下书,用使用CreateCOMObject方法,服务器端我创建RemoteDataModule,自动产生了一个接口,如IMyTest,这个接口有 Func_1方法,客户端可以这样用CreateCOMObject来调用:
var
intf: IMyTest;
begin
intf := CreateComObject(Server_TLB.CLASS_MyTest) as IMyTest;
intf.Func_1;
end;
现在我想自已再定义一个接口,如IMyTest2,实现类TMyTest2, 这个接口应该从哪里继承才能注册(是不是要自已写)并可在客户端调用。
不知道这样的思路有没有错误? 大家在作业务逻辑层是怎样设计的?
 
这几天看了一下书,用使用CreateCOMObject方法,服务器端我创建RemoteDataModule,自动产生了一个接口,如IMyTest,这个接口有 Func_1方法,客户端可以这样用CreateCOMObject来调用:
var
intf: IMyTest;
begin
intf := CreateComObject(Server_TLB.CLASS_MyTest) as IMyTest;
intf.Func_1;
end;
现在我想自已再定义一个接口,如IMyTest2,实现类TMyTest2, 这个接口应该从哪里继承才能注册(是不是要自已写)并可在客户端调用。
不知道这样的思路有没有错误? 大家在作业务逻辑层是怎样设计的?
 
把tlb拿到客户端的机器上注册下。
 
应该从IDispatch继承一个接口并实现它.
其实只要是接口有Guid都可以的.
 
我定义的接口是有GUID的,我调用时提示接口没有注册,是不是从IDispath继承就可以了,我试下看
 
客户端是要注册这个接口的, 不是光从IDispatch继承就可以的。
 
怎么注册?能否详细一点
 
把tlb放到客户机上,然后regsrv32 xxx.tlb
 
非常感谢satanmonkey
regsvr32 E:/Server/Server.tlb
提示:"E:/Server/Server.tlb"不是一个可执行文件;
--
我看了一下书,通过NEW-ActiveX-COM Object,类是从TTypeComObject中继承,接口从IUNKOWN从继承。而且initialization中有这段代码:
TTypedComObjectFactory.Create(ComServer, TMyCOM, Class_MyCOM,
ciMultiInstance, tmApartment);
这样创建的接口在客户端要可以调用。问题得到初步解决。继续学习中......
 
1.照抄你第一个RDM的Register函数
2.必需有楼上说的initialization中的部分
3.运行一下就自动注册了
4.客户端包含TLB
原理是Register部分是写服务器注册表的,如你的实现类不是由RDM继承的注册表内会少RDM中所写的部分注册表,那客户端将看不到这个实现类,但仍可用GUID调用.
 
后退
顶部