[fpc-pascal] JSON & me - blind again?
Michael Van Canneyt
michael at freepascal.org
Tue Mar 12 11:44:57 CET 2013
On Tue, 12 Mar 2013, Reinier Olislagers wrote:
> Hi list,
>
> (FPC 2.6.0 or trunk)
>
> Been fiddling a bit too long and strongly suspect PEBKAC/PICNIC (and my
> seemingly perennial refusal to adapt to Object Pascal's way of dealing
> with object references).
>
> Thanks for your suggestions!
>
>
> See the ===> marks below
>
> var
> CurrentPage: integer;
> RequestResult: THttpResult;
> CommJSON: TJSONObject;
> begin
> result:=INVALIDID;
> CommJSON:=TJSONObject.Create;
> try
> try
> // do an HTTP request and get a JSONData back.
> //
> RequestResult:=HttpRequestWithData(CommJSON,FCGIURL+'document/',rmPost);
> if RequestResult.Code<>200 then
> begin
> //snip error handling
> end
> else
> begin
> //===> the line below works - so CommJSON is a valid object, right?
> if Assigned(CommJSON) then
It is assigned, but not necessarily valid. If you freed CommJSON but did not nil it, it is still'assigned'.
> begin
> //====> however, the next line gives a runerror(210): no vmt found
> if (CommJSON.JSONType=jtObject) then
> begin
> if (CommJSON.IndexOfName('documentid',false)>-1) then
> result:=CommJSON.Integers['documentid'];
> end;
> end;
> end;
>
>
> I'm not confident about
> function HttpRequestWithData(AData: TJSONData; const AUrl: string;
> const AMethod: TRequestMethod; const AContentType: string): THttpResult;
Ehm. This must be
function HttpRequestWithData(OUT AData: TJSONData; const AUrl: string;
const AMethod: TRequestMethod; const AContentType: string): THttpResult;
Because you are passing BACK a reference!
Michael.
More information about the fpc-pascal
mailing list