[fpc-devel] comparing methods

Den Jean Den.Jean at telenet.be
Wed Sep 16 00:23:17 CEST 2009


On Sunday 13 September  2009 23:38:08 Jonas Maebe wrote:
> If the behaviour is different in Delphi.
at least in kylix.

this works in kylix and not in fpc

$ cat hooks2.pas                                               
program hooks;                                                                

{$IFDEF FPC}
{$mode delphi}
{$ENDIF}      

uses SysUtils,Classes,Types;

{$IFNDEF FPC}
type PtrUInt = DWord; // DCC is 32 bit
function HexStr(P:Pointer) : String;  
begin                                 
HexStr:=IntToHex(PtrUInt(P),4);       
end;                                  
{$ENDIF}                              

type
  TMethod_1Param = procedure(Value:integer=0) of object;

  procedure Hook_M_1Param(aMethod: TMethod_1Param);
  begin                                            
  writeln('Hooked: Method.Code:',HexStr(TMethod(aMethod).Data),
          '  Method.Data:',HexStr(TMethod(aMethod).Code));     
  TMethod_1Param(aMethod)(143);                                
  end;                                                         

type
  TC = class(TObject)
  public
  F : integer;
  constructor Create;
  procedure M_1Param(Value:integer=0);
  end;

  constructor TC.Create;
  begin
  inherited Create;
  F:=142;
  Hook_M_1Param(M_1Param);
  end;

  procedure TC.M_1Param(Value:integer);
  begin
  writeln('M_1Param called with Value:',Value,' and F is:',F);
  end;


var
  C : TC;

begin
C:=TC.Create;
end.




More information about the fpc-devel mailing list