Vars aus Hauptprogamm in Procedure manipulieren!?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
PB-Newbie
Beiträge: 2
Registriert: 28.09.2004 21:33

Vars aus Hauptprogamm in Procedure manipulieren!?

Beitrag von PB-Newbie »

Hi Leute!

Ich bin noch absoluter Neuling in PureBasic. Bin gerade auf ein Problem gestoßen. Habe auch schon versucht es mit Hilfe eines Tuts zu lösen, aber das hat leider nicht geklappt.
Ich will Variablen aus dem Hauptprogramm an eine Procedure übergeben, damit diese dort verändert werden können. Die Verändernung soll sich auf die orignal Variablen aus dem Hauptprogramm auswirken. Ich habs mit shared und Pointern versucht, aber leider hab ich die Fuktionsweise in PB noch nicht ganz durchblickt. Vielleicht kann jemand schnell ein kleines Beispiel posten.
Danke!

Gruß, PB-Newbie
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

Code: Alles auswählen

Global G
procedure Test()
  G+1
endprocedure
debug g
test()
debug g
test()
debug g
test()
Aber man sollte eigentlich nach möglichkeit Globale vermeiden.

Ansatz:

Code: Alles auswählen

procdure Test(*P.long)
  *p\l+1
endprocedure
debug a
Test(@A)
debug a
Test(@a)
debug a
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ist ein bischen schwierig sich einen Wunsch auszudenken, aber ich
probiere es mal unkompliziert :wink:
Probiere mal diesen Code aus und kommentiere mal das Shared mit dem
Semikolon weg. Ich hoffe so in der Richtung.

Code: Alles auswählen

Procedure.l mul(Zahl.l,multiplikator.l)
Shared Zahl,multiplikator
  Result=Zahl*Multiplikator
  Zahl=10
  multiplikator=5
  ProcedureReturn Result
EndProcedure

;Hauptprogramm
Zahl=10
multiplikator=2
Debug mul(Zahl,multiplikator); übergebe Zahl und Multiplikator und danach die Ausgabe
Debug Zahl; Prüfe die Variable Zahl
Debug multiplikator; Prüfe die Variable multiplikator
Debug mul(Zahl,multiplikator) ;Ausgabe neues Ergebnis
Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
bvc
Beiträge: 37
Registriert: 09.09.2004 16:02

Beitrag von bvc »

GPI hat geschrieben:

Code: Alles auswählen

procedure Test(*P.long)
  *p\l+1
endprocedure
debug a
Test(@A)
debug a
Test(@a)
debug a
Ich habe das Beispiel getestet, funktioniert. Ich verstehe aber nicht warum. Wo ist die Structure p\l deklariert? Kann mich jemand aufklären?
manchmal weiß auch ich etwas, ich erinnere mich bloß schlecht daran
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Da die Sturuktur Long schon im Reference-File von Purebasic vordeklariert ist. Nützlich für WinApi!
Benutzeravatar
PB-Newbie
Beiträge: 2
Registriert: 28.09.2004 21:33

Thx!

Beitrag von PB-Newbie »

Danke GPI!
Dein zweites Beispiel ist genau das, was ich gesucht habe.

Jetzt kann ich richtig loslegen. :)

Gruß, PB-Newbie
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

bvc hat geschrieben:Ich habe das Beispiel getestet, funktioniert. Ich verstehe aber nicht warum. Wo ist die Structure p\l deklariert? Kann mich jemand aufklären?
Mißverständis.

Ich hab in den procedure-Zeile als Übergabe eine Pointer definiert (*P) von Typ Long (.long -> *p.long). Ein Pointer ist eine Adresse. Der Typ sagt, das an dieser Adresse ein Long ist.

mit "*p\l" sag ich, das ich auf diesen Long in der Adresse von *P zugreifen will (\l).

mit @a wird nicht der INhalt der Variable a übergeben, sonder deren Adresse, so das ich oben mit den Pointer die Variable manipulieren kann.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten