Einzelnen Beitrag anzeigen

Arakis

Registriert seit: 29. Aug 2002
30 Beiträge
 
#1

Übergabeparameter verfälscht bei Aufruf einer Funktion

  Alt 31. Mär 2005, 22:24
Hi, ich habe folgendes Problem: Wenn ich eine Funktion per Funktionszeiger aufrufe, sind die Übergabeparameter irgendwie verfälscht. Ich kann mir das nicht erklären.

Delphi-Quellcode:
{------------------------------------------------------------------------------}
{ TIntegerComparer
{------------------------------------------------------------------------------}

TIntegerComparerFunc = function(x: Integer; y: Integer): Integer;
TIntegerComparer = class
  private
    _ComparerFunc: TIntegerComparerFunc;
    function GetComparerFunc: TIntegerComparerFunc;
    procedure SetComparerFunc(func: TIntegerComparerFunc);
  public
    function Compare(x: Integer; y: Integer): Integer;
    property ComparerFunc: TIntegerComparerFunc read GetComparerFunc write SetComparerFunc;
    function DefaultComparerFunc(x: Integer; y: Integer): Integer;
    Constructor Create;
    Destructor Destroy; override;
end;

...

{------------------------------------------------------------------------------}
{ TIntegerComparer
{------------------------------------------------------------------------------}

Constructor TIntegerComparer.Create;
Begin
  _ComparerFunc := @TIntegerComparer.DefaultComparerFunc;
End;

{------------------------------------------------------------------------------}
Destructor TIntegerComparer.Destroy;
Begin
  Inherited;
End;

{------------------------------------------------------------------------------}
function TIntegerComparer.GetComparerFunc: TIntegerComparerFunc;
Begin
  result := _ComparerFunc;
End;

{------------------------------------------------------------------------------}
procedure TIntegerComparer.SetComparerFunc(func: TIntegerComparerFunc);
Begin
  _ComparerFunc := func;
End;

{------------------------------------------------------------------------------}
function TIntegerComparer.Compare(x: Integer; y: Integer): Integer;
begin

  if x = y then
    result := 0
  else if (x < y) then
    result := -1
  else
    result := 1;

  //exit;

  if @_ComparerFunc = nil then
    RaiseException('TIntegerComparer.Compare: Keine Vergleichsfunktion festgelegt');
  result := _ComparerFunc(x, y);
end;

{------------------------------------------------------------------------------}
function TIntegerComparer.DefaultComparerFunc(x: Integer; y: Integer): Integer;
begin
  if x = y then
    result := 0
  else if (x < y) then
    result := -1
  else
    result := 1;
end;
In dem Moment, wenn ich in TIntegerComparer.Compare die Funktion _ComparerFunc(x, y) aufrufen, sind in der verlinkten Funktion DefaultComparerFunc die Parameter x und y auf einmal irgendwie anders anders!? Ich habe mal testweise feste Zahlen bei ComparerFunc angegeben, doch irgendwie hat dann y den Wert von x der Vorgänger funktion. Und das übergebene y wird zu x.

Ich peil gar nix mehr
  Mit Zitat antworten Zitat