我在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;
我认为可能存在编组问题???谁能证实这一点?
答案 0 :(得分:2)
我在Delphi XE6中遇到过类似的问题。我不得不将任何TStringList转换为String。
在你的情况下: -
fValues:String;
属性值:字符串读取GetValues写入SetValues;
在例程GetValues和SetValues中,您需要转换为字符串和从字符串转换。