Da haste auch wieder wahr.#NULL hat geschrieben:Ob die Funktion aufgerufen wird, kann von der Laufzeit abhängen, bzw kann der Compiler nicht wissen.Code: Alles auswählen
If Random(1) : test() : EndIf
Globales Array in Prozedur erzeugt IMA
Re: Globales Array in Prozedur erzeugt IMA
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
- Imhotheb
- Beiträge: 192
- Registriert: 10.10.2014 13:14
- Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
- Wohnort: Wolfenbüttel
Re: Globales Array in Prozedur erzeugt IMA
Ich selbst benutze Global in Proceduren nur in Zusammenhang mit Listen/Strukturen/etc. und AttachProcess/-Thread.
Da das so oder so ähnlich in der Hilfe steht, ist es vielleicht so gewollt?
Da das so oder so ähnlich in der Hilfe steht, ist es vielleicht so gewollt?
weil einfach einfach einfach ist ... mach' ich es anders
Re: Globales Array in Prozedur erzeugt IMA
Das habe ich auch erst gedacht, aber dem ist eigentlich gerade nicht so.Imhotheb hat geschrieben:Da das so oder so ähnlich in der Hilfe steht, ist es vielleicht so gewollt?
Wie gesagt, ich habe bislang auch nicht weiter drüber nachgedacht und mein Hirn hat nach dem Lesen des Teils "...dass die Global oder Shared Befehle benutzt werden müssen" offenbar abgeschaltet, weil ja "klar war", dass Share nur innerhalb von Prozeduren benutzt werden kann und somit das Global da "wohl auch" benutzt werden kann, wenn es in der Hilfe in einem Atemzug erwähnt wird. Typischer Fall von Freud'scher Verleser/Versteher.Die PB-Hilfe zu List hat geschrieben:Die neuen verknüpften Listen sind immer lokal. Dies bedeutet, dass die Global oder Shared Befehle benutzt werden müssen, wenn eine im Haupt-Quellcode deklarierte Liste in Prozeduren verwendet werden soll.
Denn auch die Beispiele in der PB-Hilfe deklarieren das Objekt nie innerhalb einer Prozedur, soweit ich das gesehen habe.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
- Imhotheb
- Beiträge: 192
- Registriert: 10.10.2014 13:14
- Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
- Wohnort: Wolfenbüttel
Re: Globales Array in Prozedur erzeugt IMA
Ich meinte diesen Bereich aus der Hilfe:
"
Hinweise zur Erstellung von DLL's:
- Die Deklaration von Arrays, Listen bzw. Maps mittels Dim, NewList bzw. NewMap muss stets innerhalb der Prozedur AttachProcess erfolgen.
"
"
Hinweise zur Erstellung von DLL's:
- Die Deklaration von Arrays, Listen bzw. Maps mittels Dim, NewList bzw. NewMap muss stets innerhalb der Prozedur AttachProcess erfolgen.
"
weil einfach einfach einfach ist ... mach' ich es anders
Re: Globales Array in Prozedur erzeugt IMA
um ehrlich zu sein, ich bin überrascht, das Global in Proceduren überhaupt erlaubt ist.
So von Sinn her sollte das Steuerwort eine Fehlermeldung verursachen.
edit: Und ist das Handbuch an der Stelle nicht veraltet?
So von Sinn her sollte das Steuerwort eine Fehlermeldung verursachen.
edit: Und ist das Handbuch an der Stelle nicht veraltet?
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: Globales Array in Prozedur erzeugt IMA
Bei Verwendung vom Modulen bei DLL´s sollte man im Module Bereich eine Procedure InitModul() : Global, etc : EndProcedure : InitModule() programmieren.Imhotheb hat geschrieben:Ich meinte diesen Bereich aus der Hilfe:
"
Hinweise zur Erstellung von DLL's:
- Die Deklaration von Arrays, Listen bzw. Maps mittels Dim, NewList bzw. NewMap muss stets innerhalb der Prozedur AttachProcess erfolgen.
"
Verhält sich dann wie AttachProcess ohne die Übergäbe von hInstance.
Wenn man es nicht so macht führt dieses zu Stack-Korruption...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Globales Array in Prozedur erzeugt IMA
ist das sicher? Weil bei einer DLL wird automatisch sämtlicher Code außerhalb von Proceduren eingesammelt und in die Attach-Procedure gesteckt.
Deshalb meinte ich ja, dass das Handbuch veraltet ist.
in der englischen Hilfe steht:
Genauso die Zeile mit Code außerhalb der Proceduren - wie gesagt, die werden eigentlich eingesammelt und bei AttachProcess ausgeführt. Ob es noch zu Stackfehlern kommt, weis ich nicht. Wenn ja, sollte man das angehen. Wenn nicht, muss der Compiler eigentlich eine Fehlermeldung schmeißen, wenn man das macht.
Wie gesagt, wirkt so, als wäre das Handbuch schlicht hier veraltet. Und imo sollte das Steuerwort Global innerhalb einer Procedure auch eine Fehlermeldung werfen.
Deshalb meinte ich ja, dass das Handbuch veraltet ist.
in der englischen Hilfe steht:
DIM, NEWLIST und NEWMAP sind auch außerhalb der AttachProcess definitiv erlaubt, in jeder Procedure! Die Zeile klingt danach, als wäre sie noch für die uralte Version geschrieben worden, wo die Arrays, Listen und Maps immer global waren. Das ist ja schon lange nicht mehr der Fall.- The declaration of arrays, lists or map with Dim, NewList or NewMap must always be done inside the procedure AttachProcess.
- Don't write program code outside procedures. The only exception is the declaration of variables or structures.
- DirectX initialization routines must not be written in the AttachProcess procedure.
Genauso die Zeile mit Code außerhalb der Proceduren - wie gesagt, die werden eigentlich eingesammelt und bei AttachProcess ausgeführt. Ob es noch zu Stackfehlern kommt, weis ich nicht. Wenn ja, sollte man das angehen. Wenn nicht, muss der Compiler eigentlich eine Fehlermeldung schmeißen, wenn man das macht.
Wie gesagt, wirkt so, als wäre das Handbuch schlicht hier veraltet. Und imo sollte das Steuerwort Global innerhalb einer Procedure auch eine Fehlermeldung werfen.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
- Imhotheb
- Beiträge: 192
- Registriert: 10.10.2014 13:14
- Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
- Wohnort: Wolfenbüttel
Re: Globales Array in Prozedur erzeugt IMA
Ist das gesichert?Weil bei einer DLL wird automatisch sämtlicher Code außerhalb von Proceduren eingesammelt und in die Attach-Procedure gesteckt.
Also ich habe das so verstanden, das wenn ich Globale Listen, Maps, etc. brauche, dann muss/soll ich laut Hilfe diese in einer Procedure deklarieren, welche ist dabei egal. Logischerweise ist es dann meistens AttachProccess() oder halt eine selbst definierte Init().
Also lieber außerhalb deklarieren und ein undokumentiertes Feature benutzen?
weil einfach einfach einfach ist ... mach' ich es anders
Re: Globales Array in Prozedur erzeugt IMA
Der Code wird nicht in der AttachProcess gesammelt, sondern außerhalb aufgerufen.
Bei mein Module OOP-BaseClassDispatch (DLL) habe ich hier die Erfahrung gesammelt und die verschiedenen Compiler-Versionen den ASM-Code von PB analysiert.
Wegen des undokumentiertes Feature hatte ich schon eine lange Diskussion und habe auch versucht eine offizielle Antwort zu bekommen.
Leider mal wieder ohne erfolgt.
Deswegen haben auch meine Module, die auch in DLL´s verwendet werden, immer eine Init Procedure.
Bei mein Module OOP-BaseClassDispatch (DLL) habe ich hier die Erfahrung gesammelt und die verschiedenen Compiler-Versionen den ASM-Code von PB analysiert.
Wegen des undokumentiertes Feature hatte ich schon eine lange Diskussion und habe auch versucht eine offizielle Antwort zu bekommen.
Leider mal wieder ohne erfolgt.
Deswegen haben auch meine Module, die auch in DLL´s verwendet werden, immer eine Init Procedure.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Globales Array in Prozedur erzeugt IMA
How are DLLs correctly programmed? hat geschrieben:You can also declare list in procedure if needed, just not in the main code.
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version