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

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to