[Lazarus] Buffer dealocating between program and C++ library

Kostas Michalopoulos badsectoracula at gmail.com
Thu May 12 04:38:53 CEST 2011


I think that using a "@" before the function pointer variable returns 
the variable's address not the function's and that the "@" is needed 
only for functions, ie.

function Foo: TBar;

...

FooRef:=@Foo;

will assign to FooRef the address of Foo, but

OtherFooRef:=@FooRef;

will try to assign to OtherFooRef the address of the FooRef variable 
(not the address stored in the FooRef variable - that is, the address of 
Foo) but fail at compilation time since OtherFooRef is supposed to be of 
type of whatever Foo is, not a pointer to that type.

However if you just check for nil this won't be noticed since by typing

if @FooRef <> nil ...

is like saying "if FooRef's address is not nil" instead of "if the 
address stored in FooRef is not nil". So basically you need to get rid 
of those "@"s.

Also personally i prefer to use the Assigned built-in function like

if Assigned(FooRef) ...

instead of

if FooRef <> nil ...


Kostas "Bad Sector" Michalopoulos




More information about the Lazarus mailing list