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