Einzelnen Beitrag anzeigen

khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#1

callback funktion bringt fehler

  Alt 20. Aug 2009, 16:12
hallo zusammen,
nachdem mir in einem anderen Tread empfohlen wurde zur Lösung des dortigen Problems eine callback-funtion zu verwenden, und ich keine Ahnung davon hatte, hab ich zum besseren Verständnis und nach Vorlage aus einem alten dephi2 -Buch mal versucht so eine Funktion zu erstellen.
Hier soll einfach beim button-klick der übergebene String "hallo Welt" in eine Listbox eingetragen werden.
Leider bekomme ich bem Kompilieren den Fehler:
mainform.pas(35,41) Error: Wrong number of parameters specified for call to "MyCallback" was mache ich falsch?

hier der quelltext:
Delphi-Quellcode:
unit mainform;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, testklasse;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    function MyCallback(s:String) : integer; stdcall ;
    testklasse: Ttestklasse;
  end;

var
  Form1: TForm1;

implementation

 procedure TForm1.Button1Click(Sender: TObject);
 begin
  testklasse:= Ttestklasse.create(self);
   testklasse.GetWert(self.MyCallback);
   testklasse.free;
 end;

 function TForm1.MyCallback(s:String) : integer; stdcall;
 begin
   self.listbox1.items.add(s);

 end;

initialization
  {$I mainform.lrs}

end.
die zweite unit:

Delphi-Quellcode:
unit testklasse;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;
Type
   TTestCallback = function(s:string): integer;



Type
  Ttestklasse = class(TPersistent)
  
public
  constructor Create(AOwner:TPersistent); published
  Destructor Destroy; override;
  procedure GetWert(TestCallback:TTestCallback);
 

end;
implementation

{@********************************************************}
{   constructor    Ttestklasse                            }
{                                                         }
{                                                         }
{********************************************************@}
constructor Ttestklasse.Create(AOwner:TPersistent);
   begin
   inherited Create; // extra wichtig, denn sonst kein Event;
    // do noch nix

   end;

{@********************************************************}
{   destructor   Ttestklasse                              }
{                                                         }
{                                                         }
{********************************************************@}
destructor Ttestklasse.Destroy;
begin
 // do noch nix

 // Always call the parent destructor after running your own code
  inherited;
end;


procedure Ttestklasse.GetWert(TestCallback:TTestCallback);
begin
  TestCallback('hallo Welt');
end;

end.
Karl-Heinz
  Mit Zitat antworten Zitat