DataSnap 服务器方法 - 编组嵌套对象
DataSnap Server Methods - Marshalling nesting objects
我在 Delphi XE6
中有一个数据快照客户端/服务器
我在客户端的以下服务器方法调用中收到无效指针操作。
S := ClientModule1.ServerMethods1Client.getReport(RunReportObj,
ReturnFileSize);
当我调试(进入)时,它发现错误在我传递给服务器方法的 TRunReportObj 的嵌套对象中
TRunReportObject
private
...
fCriteria: TCriteriaList;
...
public
function AddCrit(Const aField, aOperation: String; Const aValues: TStrings): TCriteriaObject;
property CritObjects[index: Integer]: TCriteriaObject read GetCritObject;
property Criteria: TCriteriaList read fCriteria write fCriteria;
...
end;
TCriteriaList 是 TObjectList
TCriteriaObject = class(TJSONParamObject)
private
fField: String;
fOperation: String;
fValues: TStringList;
function GetJSONObject: TJSONObject; override;
public
property Field: String read fField write fField;
property Operation: String read fOperation write fOperation;
property Values: TStringList read fValues write fValues;
constructor create;
destructor destroy;override;
end;
如果我将 fValues: TStringList 更改为字符串,它可以正常工作
所以,问题出在字符串列表 属性 "Values" 上,我已确保它已创建和销毁
constructor TCriteriaObject.create;
begin
inherited Create;
fValues := TStringList.create;
end;
destructor TCriteriaObject.destroy;
begin
fValues.Free;
inherited destroy;
end;
我认为可能存在编组问题???谁能证实这一点?
我在 Delphi XE6 中遇到过类似的问题。我必须将任何 TStringList 转换为 String。
你的情况:-
f值:字符串;
属性 值:字符串读取 GetValues 写入 SetValues;
在例程 GetValues 和 SetValues 中,您需要与字符串进行相互转换。
我在 Delphi XE6
中有一个数据快照客户端/服务器我在客户端的以下服务器方法调用中收到无效指针操作。
S := ClientModule1.ServerMethods1Client.getReport(RunReportObj,
ReturnFileSize);
当我调试(进入)时,它发现错误在我传递给服务器方法的 TRunReportObj 的嵌套对象中
TRunReportObject
private
...
fCriteria: TCriteriaList;
...
public
function AddCrit(Const aField, aOperation: String; Const aValues: TStrings): TCriteriaObject;
property CritObjects[index: Integer]: TCriteriaObject read GetCritObject;
property Criteria: TCriteriaList read fCriteria write fCriteria;
...
end;
TCriteriaList 是 TObjectList
TCriteriaObject = class(TJSONParamObject)
private
fField: String;
fOperation: String;
fValues: TStringList;
function GetJSONObject: TJSONObject; override;
public
property Field: String read fField write fField;
property Operation: String read fOperation write fOperation;
property Values: TStringList read fValues write fValues;
constructor create;
destructor destroy;override;
end;
如果我将 fValues: TStringList 更改为字符串,它可以正常工作
所以,问题出在字符串列表 属性 "Values" 上,我已确保它已创建和销毁
constructor TCriteriaObject.create;
begin
inherited Create;
fValues := TStringList.create;
end;
destructor TCriteriaObject.destroy;
begin
fValues.Free;
inherited destroy;
end;
我认为可能存在编组问题???谁能证实这一点?
我在 Delphi XE6 中遇到过类似的问题。我必须将任何 TStringList 转换为 String。
你的情况:-
f值:字符串;
属性 值:字符串读取 GetValues 写入 SetValues;
在例程 GetValues 和 SetValues 中,您需要与字符串进行相互转换。