Hallo,

wie kann man in RB eine Funktion mit Declare definieren, wie eine variable Argumentenliste (so wie z.B. printf) enthält ?

Mein konkretes Problem ist die sehr schöne Funktion AEBuildAppleEvent, mit der man über eine Stringdefinition AppleEvents zusammenbauen kann. Dies ist sehr viel angenehmer als der sonst übliche Weg über Descriptorlisten usw. Die Funktion hat folgenden Aufruf:

OSStatus AEBuildAppleEvent (
   AEEventClass theClass,
   AEEventID theID,
   DescType addressType,
   const void * addressData,
   long addressLength,
   short returnID,
   long transactionID,
   AppleEvent * result,
   AEBuildError * error,
   const char * paramsFmt,
   ...
);

Diese Funktion ist verfügbar in der Carbon Lib (ab Version 1.1) und definiert in der Headerdatei "AEHelpers.h". Mein Problem ist das "..."

Eigene Überlegungen (als "Anregung" wenn die Antwort nicht bekannt ist .-)
---------------------------
Wie werden va_args in C implementiert? (Carbon ist ja eine C-Library)
Mit der Antwort könnte man überlegen wie man das in REALbasic mit MemoryBlocks hinbekommt.

Überlegung: "Wie werden überhaupt Parameter an eine Funktion übergeben ?" Parameter an eine Funktion können sowohl Zeiger auf Werte (komplexe Datentypen) als auch Werte selbst sein (atomare Datentypen). Die Funktion mit va_args weiss also nicht was kommen wird, geschweige denn wie die Daten vorliegen. Es kann diese Information nur aus dem Formatstring (paramsFmt) ermitteln.

Überlegung: "Liegen die variablen Argumente einfach hintereinander und wird nur der Zeiger auf den Start dieser Argumentenliste übergeben ?" Die Funktion könnte dann ab einer angegebenen Stelle einfach den jeweils durch den Formatstring erwarteten Datentyp lesen. Die Länge müsste sich aus dem Datentyp ergeben (z.B. ein Long ist 4 Bytes, ein Char 1 Byte, usw.).

Überlegung: "Oder handelt es sich bei einem va_arg um einen Zeiger auf ein Array mit Zeigern auf Werte ?" Hierbei könnte die Funktion jeweils per Index auf die Zeiger zugreifen und die entsprechenden Daten lesen.



Mit freundlichen Grüssen,

Oliver Geisen
_____________________________
Systemadministrator
Kreisboten Verlag Mühlfellner KG
82362 Weilheim i. Ob.
Tel. 0881/686-904
Fax 0881/686-74


Antwort per Email an