0

我有一个在 Delphi 7 和 RemObjects SDK 中构建的客户端-服务器应用程序。客户端和服务器之间的消息是二进制的(http://wiki.remobjects.com/wiki/BinMessage)。我的问题是: 1)如果我用 TDataSet/TDataSource 填充数据并将它们从客户端发送到服务器,服务器组件的 DataSet 将包含数据吗?数据应该保持不变,不是吗?2)我试图通过 RemObjects 发送组件,封装在 TROBinaryMemoryStream 后代类中,但没有成功

类定义

  TRODataSource=class(TROBinaryMemoryStream)
   private
     FNameDS:String;
     FDS:TDataSource;
     procedure SetName(aValue:String);
     procedure SetDS(aValue:TDataSource);
  public
   published
    property Name:String read FNameDS write SetName;
    property DataSource:TDataSource read FDS write SetDS;
  end;

发送数据源的方法

function foo(aDataSource: TDataSource):integer;
var
  wStream:TRODataSource;
begin
 wStream:=TRODataSource.Create;
 wStream.Name:='TEST';
 wStream.DataSource:=aDataSource;
 try
  Result:=(RORemoteService as ISvc..).foo1(wstream);//method existing on the server will //return how many records are in the dataset
 finally
  freeandnil(wstream);
 end;
end;

任何答案将不胜感激。

LE:似乎只有 TROComplexType 的后代类可以序列化http://wiki.remobjects.com/wiki/Remote_Object_Allocation_and_Serialization。但我不确定我是否不能序列化流上的组件。

4

2 回答 2

1

对于 TComponent/TPersistent 序列化(就像 Delphi 对 .dfm 文件所做的那样),您可以使用“ObjectTextToBinary”: http ://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Classes_ObjectTextToBinary@TStream@ TStream.html

但是,如果您使用子对象(对象属性),则会出现问题。

您还可以搜索更通用的序列化(使用 RTTI)到 XML 等: Delphi (win32) 序列化库 Delphi Component Serialization

编辑:您可以将结果作为字符串发送到 RemObjects 或将其放入 TMemoryStream 并使用 RO Binary 类型。

于 2011-02-23T10:31:54.683 回答
1

当您将组件序列化为流时(请参阅我的另一篇文章),您可以使用“二进制”类型将流从服务器发送到客户端(和反向): http ://wiki.remobjects.com/wiki/ TROBinaryMemoryStream_Class

或者只是将其作为字符串发送:-)。无需覆盖TROBinaryMemoryStream!

于 2011-02-23T12:18:44.910 回答