I tried the following:

procedure ThisAndThat(bitmap: TBitmap);
begin
 if not Assigned(bitmap) then
   bitmap := TBitmap.Create;
end;

function Test: boolean;
var
 bitmap: TBitmap;
begin
 bitmap := nil;
 ThisAndThat(bitmap);
 Result := Assigned(bitmap);
 bitmap.Free;
end;

In Delphi a class is always treated as a 'var' when passed in a
function since a class is a pointer to actual data; logical but
confusing when begining in Delphi. So in Delphi Test() would return
true. I made a function like this in Lazarus and I see that it's not
working. This behave as a local copy of the class! Now in FPC I
changed the procedure for:
   procedure ThisAndThat(var bitmap: TBitmap);
and this is working.

The question: I guess this is an other delphi mode thing?
Is there a page with all these Delphi mode / FPC differences? I'll
check the wiki right after.

I prefer the behaviour of FPC because it is consistent, but is it
really a copy a of class?!?. Since my background, I'll have to check
all my functions that have classes in parameters to make sure this is
working as expected.

Best regards.

--
Alexandre Leclerc
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to