【发布时间】:2016-06-06 15:18:24
【问题描述】:
我在 Delphi XE6 中有一个 datasnap 客户端/服务器
我在客户端的以下服务器方法调用中收到无效的指针操作。
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 更改为字符串,它可以正常工作
所以,问题出在 stringlist 属性“Values”上,我确保它已被创建和销毁
constructor TCriteriaObject.create;
begin
inherited Create;
fValues := TStringList.create;
end;
destructor TCriteriaObject.destroy;
begin
fValues.Free;
inherited destroy;
end;
我认为可能存在编组问题???谁能证实这一点?
【问题讨论】:
-
您可以尝试将以下属性添加到您的 FValues:TCriteriaObject 中的 TStringList 字段 -
[JSONReflect(ctTypeObject, rtTypeObject, TStringListInterceptor, nil, True)]并将Data.DBXJSONReflect添加到您的 uses 子句中。