Referenz - CVA_COPY
Syntax: CVA_COPY(Ziel, Quelle)
Typ: Makro
Kategorie: Speicher
CVA_COPY initialisiert ein Objekt für eine variable Parameterliste aus einem anderen Objekt.
- 'Ziel' ist eine Variable vom Typ CVA_LIST, die initialisiert werden soll.
- 'Quelle' ist eine bereits initialisierte Variable vom Typ CVA_LIST, aus der kopiert werden soll.
CVA_COPY kann nur in Prozeduren mit variabler Parameterliste eingesetzt werden. Es initialisiert ein Objekt vom Typ CVA_LIST, mit dem es möglich ist, die Parameter dieser variablen Liste der Reihe nach mittels CVA_ARG auszulesen. Das Makro arbeitet wie ein Konstruktor und benötigt in derselben Prozedur ein abschließendes CVA_END, das wie ein Destruktor arbeitet.
Beispiel 1: Kopie der variablen Liste anlegen und auswerten
SUB VarListProc CDECL(anzahl AS INTEGER, ... )
DIM argumente1 AS CVA_LIST
DIM argumente2 AS CVA_LIST
CVA_START(argumente1, anzahl) ' erste Liste
CVA_COPY (argumente2, argumente1) ' Kopie anlegen
FOR i AS INTEGER = 1 TO anzahl
PRINT CVA_ARG(argumente1, INTEGER), CVA_ARG( argumente2, INTEGER)
NEXT
' aufräumen
CVA_END(argumente2)
CVA_END(argumente1)
END SUB
VarListProc(4, 4000, 300, 20, 1)
SLEEP
Beispiel 2: Kopie der variablen Liste an eine andere Prozedur übergeben
SUB unterProc CDECL (anzahl AS INTEGER, BYREF argumente AS CVA_LIST)
' Wenn nicht sicher ist, ob die aufrufende Funktion eine eigene
' Kopie der Parameterliste angelegt hat, ist es sicherer, selbst
' eine Kopie anzulegen und diese zu verwenden.
DIM a AS CVA_LIST
CVA_COPY(a, argumente)
PRINT "unterProc"
FOR i AS INTEGER = 1 TO anzahl
PRINT CVA_ARG(a, INTEGER)
NEXT
' aufräumen
CVA_END(a)
END SUB
Sub VarListProc CDECL(anzahl AS INTEGER, ...)
DIM argumente AS CVA_LIST
CVA_START(argumente, anzahl)
' Wenn nicht sicher ist, ob die aufgerufene Funktion eine eigene
' Kopie der Parameterliste anlegt, ist es sicherer, selbst eine
' Kopie anzulegen und diese zu übergeben.
DIM tmp AS CVA_LIST
CVA_COPY(tmp, argumente)
unterProc(anzahl, tmp)
CVA_END(tmp)
' argumente ist noch immer gültig und kann verwendet werden.
PRINT "VarListProc"
FOR i AS INTEGER = 1 TO anzahl
PRINT CVA_ARG(argumente, INTEGER)
NEXT
' aufräumen
CVA_END(argumente)
END SUB
VarListProc 4, 4000, 300, 20, 1
SLEEP
Hinweis:
Eine SUB/FUNCTION, die eine variable Parameterliste verwendet, muss zwingend mit CDECL deklariert werden. Ansonsten meldet der Compiler einen Fehler.
Unterschiede zu QB: neu in FreeBASIC
Plattformbedingte Unterschiede:
Der exakte Datentyp und die Größe von CVA_LIST ist plattformabhängig.
Unterschiede zu früheren Versionen von FreeBASIC: existiert seit FreeBASIC v1.07.0
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht CVA_COPY nicht zur Verfügung und kann nur über __CVA_COPY aufgerufen werden.
Siehe auch:
CVA_START, CVA_ARG, CVA_END, DECLARE, SUB, FUNCTION, CDECL, Datentypen, ... (Auslassung[Ellipsis]), Prozeduren
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|