在客户端:
1. 如果是向服务器端发送数据,则是创建对象,赋值,调用接口函数,最后要释放对象;
2. 如果是从服务器接收数据,则是定义一个变量,调用接口函数获取数据,即这个变量已经是一个对象实例了。用完这个变量,最后要释放。
在服务器端,按照 HELP 所说,TRemotable 对象是自动释放的。但是,如果返回的 TRemotable 内部有字段是另一个
TRemotable 类的实例的数组,比如:
TSalary = class(TRemotable)
private
FID: Integer;
FSalary: Integer;
published
property ID: Integer read FID write FID;
property Salary: Integer read FSalary write FSalary;
end;
TSalaryList = array of TSalary;
TRen = class(TRemotable)
private
FRName: string;
FID: Integer;
FSalarys: TSalaryList;
public
procedure SetSalaryLength(const i: Integer);
published
property ID: Integer read FID write FID;
property RName: string read FRName write FRName;
property Salarys: TSalaryList read FSalarys write FSalarys;
end;
那么,在服务器端的实现代码里,需要这样做:
function TOPFTest.GetRen: TRen;
var
ASalary: TSalary;
ASalarys: TSalaryList;
ID: Integer;
begin
Result := TRen.Create;
Result.ID := 2;
Result.RName := 'pcplayer - 哈哈';
Result.SetSalaryLength(3);
ASalary := TSalary.Create;
ASalary.ID := Result.ID;
ASalary.Salary := 1200;
Result.Salarys[0] := ASalary;
Result.DataContext.AddObjectToDestroy(ASalary);
ASalary := TSalary.Create;
ASalary.ID := Result.ID;
ASalary.Salary := 1201;
Result.Salarys[1] := ASalary;
Result.DataContext.AddObjectToDestroy(ASalary);
ASalary := TSalary.Create;
ASalary.ID := Result.ID;
ASalary.Salary := 1202;
Result.Salarys[2] := ASalary;
Result.DataContext.AddObjectToDestroy(ASalary); 《----- 这里要用这个方法,则
Result 这个对象被服务器端自动释放的时候,它会释放DataContext内部的对象。否则,根据测试代码的观察,有内存泄漏,也就是
ASalary 对象没有被自动释放。
end;