Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12

Re: (const Param:Integer)oder(Param:Integer)-Unterschied?

  Alt 7. Jul 2005, 19:16
Delphi-Quellcode:
function EBP: Cardinal; asm mov eax, ebp end;

// {$O-}
function ShowThat(const Param: Integer): Boolean;
begin
  PInteger(@Param)^ := 9;
  if Cardinal(@Param) <= EBP then // Stack wird von der größeren zur kleineren Adresse hin aufgebaut
    ShowMessage('Param liegt im Stackframe von ShowThat');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  V: Integer;
begin
  V := SpinEdit1.Value;
  ShowThat(V);
  ShowMessage(IntToStr(V));
end;
Da kommt bei mir für SpinEdit1.Value=1 in der MessageBox ein "1" heraus.

Das kann man auch noch anders Beweisen, indem man @Param mit dem EBP-Register vergleicht. Ist @Param kleiner gleich EBP, dann liegt @Param im Stackframe von ShowThat und nicht im Stackframe von Button1Click.
  Mit Zitat antworten Zitat