Hi,
ich binde eine C-
DLL Datei mit ins Projekt ein. Eine Funktion davon erwartet eine Callback-Funktion (hierfür hab ich eine Delphi Funktion geschrieben) und ein void* als Argument für die Callback-Funktion.
Schreib ich: dll_function(@my_callback, PAnsiChar('foobar')); wird my_callback(arg) aufgerufen und ich kann mit ShowMessage den Sring ausgeben.
Allerdings rufe ich dll_function aus einer Methode eines Objektes heraus auf und möchte self als arg übergeben und im my_callback() dann arg casten und eine bestimmte methode davon aufrufen (z.B. ClassName).
Genau das funktioniet aber nicht. Ich schreibe dll_function(@my_callback, Addr(self)); und my_callback sieht so aus:
function my_callback(arg: Pointer): Integer; cdecl;
var
obj: ^MyClass;
begin
obj = arg;
ShowMessage(obj.className); // Zeichenwirrwarr oder
Access violation
end;
Wie muss ich nun arg casten damit ich damit arbeiten kann, denn offensichtlich stimmt irgendwas mit dem Pointer nicht.
Ich hab sämtliche Kombinationen von @x,Addr(x) ^x und x^ nun durch aber nichts funktioniert - lediglich die PansiChar sache klappt.
Ist self überhaupt ein Object oder ist das schon ein Pointer? (In C++ ist this ja z.B. auch ein Pointer).