{$MODE objfpc} program procofobject_arg; type TProcOfObject = procedure of object; TTestClass = class procedure SomeMethod; end; procedure TTestClass.SomeMethod; begin end; // the following proc won't print i2 correctly procedure CrashProc(i1: Integer;method: TProcOfObject; i2: Integer); begin WriteLn('i1 is :', i1); WriteLn('i2 is :', i2); end; var instance: TTestClass; begin instance := TTestClass.Create; CrashProc(123, @instance.SomeMethod, 456); end.