如何远程传递对象(tform)? ( 积分: 100 )

  • 主题发起人 主题发起人 aaacb
  • 开始时间 开始时间
A

aaacb

Unregistered / Unconfirmed
GUEST, unregistred user!
如何远程传递对象(tform)?
 
不要传递复杂对象,除非你是在同一程序内。 也不要传递包含长度不定的对象。
procedure TBaseSocketServer.SendObject(IObj: TObject;
IConn: TDXSock);
var
Ltep: Pint;
begin
Ltep := Pointer(IObj);
inc(Ltep);
IConn.SendBuf(ltep^, IObj.InstanceSize - 4);
end;

procedure TBaseSocketServer.StartServer;
begin
Server.Start;
end;

procedure TBaseSocketServer.GetObject(IObj: TObject;
IConn: TDXSock);
var
Ltep: pint;
begin
Ltep := Pointer(Iobj);
inc(Ltep);
IConn.ReceiveBuf(Ltep^, Iobj.InstanceSize - 4);
end;
 
COM就可以远程激活.只不过不知道你的传递有什么用处?
 
远程传递对象, 不是不可以做到, 是要分情况, 因为远程对象,在另一台机器里, 属于不同的空间. 传指针肯定没用.
所以必须有散集和列集的过程. COM对象的概念.
也就是说要把一个对象,所有的属性, 一个个动态取出来,根据RTTL信息, 判断类型,长度,写入stream中, 如果是属性本身又是对象.就需要递归调用.
remobject可以传递对象. 具体为什么可以传,到大富翁上看我写的remobject源码分析.
 
晕哟,远程传过去,还不是传这个对象相应的数据过去,然后再在远程动态创建,再调用它的相应的方法,你这样传只不过是传本地内存的一个指针罢了
 
后退
顶部