Struktur an eine Funktion übergeben ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Struktur an eine Funktion übergeben ?

Beitrag von MVXA »

Hallo
Kann man an eine Funktion eine Struktur übergeben ? Ich hab so eine Funktion geschrieben:

Code: Alles auswählen

Procedure SendECData(ECData.ECProtokoll)
    ; Haufen Code...
EndProcedure
PB macht aber dann bei der Declare Funtkion halt und gibt die Meldung aus:
[c]Syntax Error[/c]
Die Declare hat aber jaPBe erstellt.
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Eine Strukur kann man nicht übergeben, aber eine Variable mit einer Struktur:

Code: Alles auswählen

Procedure SendECData(*ECData.ECProtokoll)
    ; Haufen Code...
EndProcedure
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Also dann sowas wie:

Code: Alles auswählen

Procedure SendECData(*ECData.ECProtokoll) 
    ; Haufen Code... 
EndProcedure
SendECData(@Variable.ECProtokoll)
oder wenn du eine geschützte Variable willst (geht leider nur ohne Strings ins Structure):

Code: Alles auswählen

Procedure SendECData(pECData.l) 
  Protected Temp.ECProtokoll
  CopyMemory(pECData, @Temp)
  Temp\irgendwas
EndProcedure

SendECData(@Variable.ECProtokoll)
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

supi, danke ^^
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

remi_meier hat geschrieben:

Code: Alles auswählen

Procedure SendECData(pECData.l) 
  Protected Temp.ECProtokoll
  CopyMemory(pECData, @Temp)
  Temp\irgendwas
EndProcedure

SendECData(@Variable.ECProtokoll)
Das muss "CopyMemory(pECData, @Temp, SizeOf(ECProtokoll))" heißen ;)

Und man kann auch das @ beim Aufruf weglassen:

Code: Alles auswählen

SendECData(Variable.ECProtokoll)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ah ja, sorry :oops:
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

Das mit COpy geht nur, wenn kein String in der Structur ist. Wenn man sauber programmiert und die Daten nur ließt, dann ist das kopieren auch unnötig. (man sollte diesbezüglich ein kommentar am header der Porcedure machen...)

Anderseits ist das eine gute Methode, mehr als ein Rückgabe wert von einer Procedure zu erhalten...

(p.s.: wenn nur gelesen wir, würde ich den Pointer *IN_ oder *RO_ (Read only) beginnen lassen...)
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten