Aktuelle Zeit: 24.08.2019 12:00

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 16.05.2019 22:49 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
#NULL hat geschrieben:
Ob die Funktion aufgerufen wird, kann von der Laufzeit abhängen, bzw kann der Compiler nicht wissen.
Code:
If Random(1) : test() : EndIf

Da haste auch wieder wahr. :D

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 17.05.2019 05:38 
Offline
Benutzeravatar

Registriert: 10.10.2014 13:14
Wohnort: Wolfenbüttel
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?

_________________
weil einfach einfach einfach ist ... mach' ich es anders


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 17.05.2019 09:42 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Imhotheb hat geschrieben:
Da das so oder so ähnlich in der Hilfe steht, ist es vielleicht so gewollt?
Das habe ich auch erst gedacht, aber dem ist eigentlich gerade nicht so.

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.

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. :lol:

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!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 17.05.2019 09:50 
Offline
Benutzeravatar

Registriert: 10.10.2014 13:14
Wohnort: Wolfenbüttel
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. 
"

_________________
weil einfach einfach einfach ist ... mach' ich es anders


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 17.05.2019 15:26 
Offline

Registriert: 29.08.2004 13:18
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?

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 17.05.2019 22:54 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
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. 
"


Bei Verwendung vom Modulen bei DLL´s sollte man im Module Bereich eine Procedure InitModul() : Global, etc : EndProcedure : InitModule() programmieren.
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 v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 18.05.2019 07:05 
Offline

Registriert: 29.08.2004 13:18
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:
Zitat:
- 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.

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.
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!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 18.05.2019 09:09 
Offline
Benutzeravatar

Registriert: 10.10.2014 13:14
Wohnort: Wolfenbüttel
Zitat:
Weil bei einer DLL wird automatisch sämtlicher Code außerhalb von Proceduren eingesammelt und in die Attach-Procedure gesteckt.

Ist das gesichert?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 18.05.2019 11:26 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
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.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Globales Array in Prozedur erzeugt IMA
BeitragVerfasst: 18.05.2019 11:28 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
You can also declare list in procedure if needed, just not in the main code.

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye