Xojo Conferences
XDCMay2019MiamiUSA

va list in Declare verwenden ? (Real Studio network user group Deutschland Mailinglist archive)

Back to the thread list
Previous thread: Styledtext als Unicode sichern
Next thread: Re: realbasic-nug.de Nachrichtensammlung, Band 29, Eintrag 6


Probleme mit String Bearbeitung   -   Markus Schnell
  va list in Declare verwenden ?   -   Oliver Geisen

va list in Declare verwenden ?
Date: 10.08.06 07:59 (Thu, 10 Aug 2006 08:59:23 +0200)
From: Oliver Geisen
Hallo,

nach meinem Erfolg mit der Verwendung von Shared Libs für AppleEvents
nun wieder ein Rückschlag. Wie um alles in der Welt übergibt man ein
variadic, also ein Array mit variabler Länge welches im C-Code den
Typ "va_list" hat ?

Ich habe alles möglich versucht, als einfache Liste als Liste mit
Zeigern, ohne Erfolg. Dann habe ich stundenlang gegooglet um
herauszubekommen wie das ABI für einen solchen Datentyp ist,
ebenfalls ohne Erfolg. Die VA-Geschichten sind mit Makros realisiert
und auch wenn mir das Prinzip klar ist, habe ich es dennoch nicht
geschafft in RB einen MemomryBlock zu generieren den ein mit Declare
definierter Aufruf als va_list akzeptiert.

Ich habe jetzt so viel gelesen und gesehen und probiert das ich
völlig wirr im Kopf bin *-7
Bitte kann mir jemand mit Erfahrung/Ahnung helfen ?!

Mit freundlichen Grüssen,

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


Hier etwas Code zum experimentieren:
-------------------------
Declare Function AEBuildAppleEvent Lib "CarbonLib" (theClass as
OSType, theID as OSType, addressType as OSType, addressData as Ptr,
addressLength as Integer, returnID as Integer, transactionID as
Integer, result as Ptr, error as Ptr, paramsFmt as CString, theArgs
as Ptr) as Integer
Declare Function AESend Lib "CarbonLib" (theAppleEvent as Ptr,
reply as Ptr, sendMode as Integer, sendPriority as Integer,
timeOutInTicks as Integer, idleProc as Ptr, filterProc as Ptr) as
Integer

Dim OSErr as Integer
Dim applSign as String
Dim aevent as MemoryBlock
Dim paramsFmt as String
Dim theArgs as MemoryBlock
Dim reply as MemoryBlock

paramsFmt = "'----':[TEXT(@), TEXT(@)]"

theArgs = NewMemoryBlock(256)
theArgs.CString(0) = "Dok1"
theArgs.CString(5) = "Dok2"

// build event from paramsFmt/argsBlock
applSign = "XPR3"
aevent = NewMemoryBlock(4)
OSErr = AEBuildAppleEvent("aevt", "odoc", "sign", applSign, 4, -1,
0, aevent, nil, paramsFmt, theArgs)
if (OSErr <> 0) then
MsgBox "Error " + Str(OSErr)
end if

// send event (wait for reply)
reply = NewMemoryBlock(4)
OSErr = AESend(aevent, reply, 3, 0, -1, nil, nil)
if (OSErr <> 0) then
MsgBox "Error " + Str(OSErr)
Return
end if
-------------------------