0

Delphi7とRemObjectsSDKで構築されたクライアントサーバーアプリケーションがあります。クライアントとサーバー間のメッセージはバイナリです(http://wiki.remobjects.com/wiki/BinMessage)。私の質問は次のとおりです。1)TDataSet / TDataSourceをデータで入力し、それらをクライアントからサーバーに送信した場合、サーバーコンポーネントのDataSetにデータが含まれますか?データは永続的なままである必要がありますか?2)TROBinaryMemoryStreamの子孫クラスにカプセル化されたRemObjectsを介してコンポーネントを送信しようとしましたが、成功しませんでした

クラス定義

  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

ただし、サブオブジェクト(オブジェクトプロパティ)を使用する場合、これにより問題が発生します。

XMLなどへのより一般的なシリアル化(RTTIを使用)を検索することもできます 。Delphi(win32)シリアル化ライブラリ Delphiコンポーネントのシリアル化

編集:結果をRemObjectsで文字列として送信するか、TMemoryStreamに入れてROバイナリタイプを使用できます。

于 2011-02-23T10:31:54.683 に答える
1

コンポーネントをストリームにシリアル化する場合(他の投稿を参照)、「バイナリ」タイプを使用して、サーバーからクライアントにストリームを送信(およびその逆)できます: http ://wiki.remobjects.com/wiki/ TROBinaryMemoryStream_Class

または、文字列として送信します:-)。TROBinaryMemoryStreamをオーバーライドする必要はありません!

于 2011-02-23T12:18:44.910 に答える