DCOMConnection1.GetServer与SocketConnection1.GetServer(interface not supported 错误

  • 主题发起人 主题发起人 gmtech
  • 开始时间 开始时间
G

gmtech

Unregistered / Unconfirmed
GUEST, unregistred user!
DCOMConnection1.GetServer与SocketConnection1.GetServer(interface not supported 错误)(150分)<br />var
Iobj:IServer;
begin
DCOMConnection1.Connected:=True;
Iobj:=DCOMConnection1.GetServer as IServer;
Iobj.方法;//正确
end;
但是为什么用SocketConnection会...???
var
Iobj:IServer;
begin
SocketConnection1.Connected:=True;
Iobj:=SocketConnection1.GetServer as IServer;
Iobj.方法;//interface not supported 错误
end;
 
SocketConnection好象要在客户端注册类型库才能用接口调用
为什么不直接用SocketConnection1.AppServer.方法 呢?
 
SocketConnection不支持前期绑定的功能,也就是SocketConnection1.GetServer as IServer,你要调用接口中的方法,只能采取后期绑定的方法:
SocketConnection1.Appserver.方法
 
SocketConnection1.Appserver.方法 是可以.
怎么样才能让SocketConnection1.GetServer as IServer 正确调用接口
 
好像没有办法,因为SocketCOnnection是Borland提供的一种调用方法,不是微软提供的调用COM+的方法,因此目前还不支持前期绑定的功能
 
用Supports试试
procedure TForm1.Button1Click(Sender: TObject);
var
MyObject:TMyObject;
MyObject2:TMyObject2;
Intf1:IMyInterface;
Intf2:IMyInterface2;
V:Variant;
begin
MyObject:=TMyObject.Create;
MyObject.FDelgateObj:=TMyObject2.Create;
V:=(MyObject as IInterface);
if Supports(V,IMyInterface,Intf1) then
ShowMessage(Intf1.SayHello);
if Supports(V,IMyInterface2,Intf2) then
ShowMessage(Intf2.SayHello2);
end;
 
说说我的方法.
仔细察看 YourServer_Tlb.pas 有一个 IyourServer 的 interface 这个就可以转换.接口了. 也就可以调用了.前提是在本地注册过 YourServer_.TLb
下面是代码:
var App: IDBAppDisp;
App:= IDBAppDisp(IDispatch(SocketConnection1.AppServer));
App.Method1;
 
itren的方法可以.谢了,接分吧!
不过要tregsvr.exe YourServer_.TLb
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
988
import
I
后退
顶部