Einzelnen Beitrag anzeigen

cytrinox

Registriert seit: 4. Sep 2006
88 Beiträge
 
#1

self Pointer an C Funktionen weitergeben

  Alt 11. Nov 2008, 15:32
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).
  Mit Zitat antworten Zitat