Ich bin der Meinung, dass man auch Methoden (nicht nur Prozeduren und Funktionen) verwenden kann. Da ein of object; aber in einem Record (TMethod) endet, muss man diesen ve-rarbeiten.theo hat geschrieben:"of object" schon mal nicht.Targion hat geschrieben:Wenn ich also sowas habe:Kann ich das 1:1 in der Lib nutzen, und in C wie in Pascal einfach die Adresse der Prozedur übergeben?Code: Alles auswählen
TMessageEvent = procedure(Sender: TObject;msg: String) of object; function remove_app(aid: String; msg: TMessageEvent; fast: Boolean=false;
Das muss eine normale Prozedur sein:
procedure Test(inp:Pchar); cdecl;
begin
//blah
end;
MeinRegisterCallbackInC(@Test);
Glaub ich auf die Schnelle
Was mir beim Übersetzen der libgio-Header-Dateien aufgefallen ist, ist, dass man die Methoden auch direkt als Funktions-Zeiger verwenden kann; man muss dann nur ein bisschen aufpassen.
Code: Alles auswählen
function TMyObject.DoSth(param: PChar): Integer; cdecl;
// wäre mit
TMethod(@TMyObject.DoSth).Code;
// als Funktionszeiger zugänglich
Code: Alles auswählen
TDoSthFunc = function (Self: TObject; param: PChar): Integer; cdecl;
Code: Alles auswählen
typedef _fpcobject fpcobject; /* als dummy record um Zeiger darauf verwenden zu können */
typedef long (*tdosthfunc) (Self *fpcobject; param *Char);