Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - CVA_COPY

Referenz-Navigation

 

Syntax: CVA_COPY(Ziel, Quelle)
Typ: Makro
Kategorie: Speicher

CVA_COPY initialisiert ein Objekt für eine variable Parameterliste aus einem anderen Objekt.

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 BefehlsreferenzeintragCVA_ARG auszulesen. Das Makro arbeitet wie ein BefehlsreferenzeintragKonstruktor und benötigt in derselben Prozedur ein abschließendes BefehlsreferenzeintragCVA_END, das wie ein BefehlsreferenzeintragDestruktor 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 BefehlsreferenzeintragSUB/BefehlsreferenzeintragFUNCTION, die eine variable Parameterliste verwendet, muss zwingend mit BefehlsreferenzeintragCDECL 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 Befehlsreferenzeintrag-lang qb steht CVA_COPY nicht zur Verfügung und kann nur über __CVA_COPY aufgerufen werden.

Siehe auch:
BefehlsreferenzeintragCVA_START, BefehlsreferenzeintragCVA_ARG, BefehlsreferenzeintragCVA_END, BefehlsreferenzeintragDECLARE, BefehlsreferenzeintragSUB, BefehlsreferenzeintragFUNCTION, BefehlsreferenzeintragCDECL, BefehlsreferenzeintragDatentypen, Befehlsreferenzeintrag... (Auslassung[Ellipsis]), BefehlsreferenzeintragProzeduren


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 18.08.2020 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 18.08.2020 von Redakteurnemored gespeichert.
  Versionen Versionen