Hi,
I usually use objfpc mode, however I have a few units in delphi mode
and don't know if it is a bug or normal delphi behaviour.
In the following program I have variable of type "procedure of
object". If I assign a method of a class using object name:
CM.Callback := CM.ContextMenuSelect;
everything is ok. But I can also assign it using class name:
CM.Callback := TContextMenu.ContextMenuSelect;
The program obviously crashes with access violation in
ContextMenuSelect on access to FFiles.
Shouldn't this give a compilation error, or is it considered a programmer error?
_______
program class_callback;
{$mode delphi}{$H+}
uses
Classes;
type
TNotifyProc = procedure (Sender: TObject) of object;
TContextMenu = class
private
FFiles: TStringList;
public
Callback: TNotifyProc;
constructor Create;
procedure ContextMenuSelect(Sender:TObject);
end;
constructor TContextMenu.Create;
begin
FFiles := TStringList.Create;
FFiles.Add('Example string');
end;
procedure TContextMenu.ContextMenuSelect(Sender:TObject);
begin
Writeln(FFiles[0]);
end;
var
CM: TContextMenu;
begin
CM := TContextMenu.Create;
// This works fine
CM.Callback := CM.ContextMenuSelect;
CM.Callback(CM);
// This causes crash
// Should this be allowed to assign?
CM.Callback := TContextMenu.ContextMenuSelect;
CM.Callback(CM);
CM.free;
end.
--
cobines
_______________________________________________
fpc-pascal maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal