Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Methoden/Funktionspointer (https://www.delphipraxis.net/172783-methoden-funktionspointer.html)

sashs 22. Jan 2013 20:39

Methoden/Funktionspointer
 
Hallo,

ich möchte eine MacOS-Funktion aufrufen, die einen Funktionspointer übergeben bekommt.
Wenn ich einen normalen Prozeduren-Typ (type xxx=procedure; cdecl; ) definiere funktioniert es ohne Probleme.
Wenn ich aber eine Methode übergeben möchte und ich den Typ auf "type xxx= procedure of object;cdecl;" ändere stürtzt das Programm ab.

Weiß jemand was das Problem ist?

Viele Grüße

Sascha

Medium 22. Jan 2013 21:01

AW: Methoden/Funktionspointer
 
procedure of object übergibt als ersten Parameter "self", also das Objekt, das aufruft. Das wird die Funktion aus dem Tritt bringen, da nun die Parameterliste quasi um 1 nach hinten verschoben ist. Warum möchtest du die Deklaration als "of object" haben?

sashs 22. Jan 2013 21:18

AW: Methoden/Funktionspointer
 
Danke für deine Antwort.

Die Funktion die übergeben werden soll ist eine Callback-Funktion. Und jedes Objekt muss eine eigene CallbackFunktion haben, da durch diese Funktion etwas am Objekt geändert wird.

Gruß

Sascha

Medium 22. Jan 2013 21:50

AW: Methoden/Funktionspointer
 
Wenn der Callback kein Sender-Objekt vorsieht, musst du das wohl oder übel über jeweils ganz eigene Prozeduren machen :? Wenn die Zurückgerufenen dynamisch sind, wird das aber mindestens so ekelig, wie das Assembler-Gefummel um den self-Parameter raus zu bekommen. In dem Fall wäre es ggf. sinnvoll zu überlegen, die Callbacks seriell zu gestalten. (Das wäre jedoch nur sinnvoll, wenn der Callback einmalig geschehen soll, bzw. ein sonstwie definiertes Ende hat.)

Furtbichler 23. Jan 2013 07:17

AW: Methoden/Funktionspointer
 
Das jedes Objekt 'seine' Antwort bekommt, ist kein Problem, sofern die Aufrufe serialisiert werden, d.h. vor dem N.ten Aufruf muss der N-1.te Callback erfolgt sein. Und das kontrolliert man mit einem Synchronisationsobjekt. Bei Windows wäre das ein Mutex, eine Semaphore o.ä. Bei FMX/IOS gibt es mit Sicherheit etwas adäquates.

Dem Fehlen eines 'Sender'-Objektes entnehme ich, das die IOS-Funktion nicht sonderlich robust mit Multithread-Aufrufen klar kommt, d.h. hier müsste eh synchronisiert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz