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