У меня есть клиент/сервер datasnap в 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 на строку, все работает нормально
Итак, проблема связана со свойством списка строк «Значения», которое я убедился, что оно создано и уничтожено.
constructor TCriteriaObject.create;
begin
inherited Create;
fValues := TStringList.create;
end;
destructor TCriteriaObject.destroy;
begin
fValues.Free;
inherited destroy;
end;
Я думаю, что может быть проблема маршалинга??? Кто-нибудь может это подтвердить?
[JSONReflect(ctTypeObject, rtTypeObject, TStringListInterceptor, nil, True)]
и добавитьData.DBXJSONReflect
в предложение использования. - person Jason   schedule 08.06.2016