M mmzmagic Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-12 #2 不要传递复杂对象,除非你是在同一程序内。 也不要传递包含长度不定的对象。 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;
不要传递复杂对象,除非你是在同一程序内。 也不要传递包含长度不定的对象。 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;
W wu_yanan2003 Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-26 #4 远程传递对象, 不是不可以做到, 是要分情况, 因为远程对象,在另一台机器里, 属于不同的空间. 传指针肯定没用. 所以必须有散集和列集的过程. COM对象的概念. 也就是说要把一个对象,所有的属性, 一个个动态取出来,根据RTTL信息, 判断类型,长度,写入stream中, 如果是属性本身又是对象.就需要递归调用. remobject可以传递对象. 具体为什么可以传,到大富翁上看我写的remobject源码分析.
远程传递对象, 不是不可以做到, 是要分情况, 因为远程对象,在另一台机器里, 属于不同的空间. 传指针肯定没用. 所以必须有散集和列集的过程. COM对象的概念. 也就是说要把一个对象,所有的属性, 一个个动态取出来,根据RTTL信息, 判断类型,长度,写入stream中, 如果是属性本身又是对象.就需要递归调用. remobject可以传递对象. 具体为什么可以传,到大富翁上看我写的remobject源码分析.
X xmcccc Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-26 #5 晕哟,远程传过去,还不是传这个对象相应的数据过去,然后再在远程动态创建,再调用它的相应的方法,你这样传只不过是传本地内存的一个指针罢了