Zugriff auf Main von innerhalb eines Moduls
Zugriff auf Main von innerhalb eines Moduls
Ja, ja Ich weiß Module sind zur Code Abschottung gedacht.
Aber ist es irgendwie möglich auf Konstanten im Haupt program zuzugreifen?
Aber ist es irgendwie möglich auf Konstanten im Haupt program zuzugreifen?
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Re: Zugriff auf Main von innerhalb eines Moduls
Nicht direkt...
__________________________________________________
Quote-Tags>Code-Tags
14.05.2016
RSBasic
Code: Alles auswählen
DeclareModule Common
Enumeration 10
#common_value0
#common_value1
EndEnumeration
EndDeclareModule
Module Common
EndModule
DeclareModule MyModul
Declare fc()
EndDeclareModule
Module MyModul
UseModule Common
Procedure fc()
ProcedureReturn #common_value0
EndProcedure
EndModule
;- Test
UseModule Common
Debug MyModul::fc()
Debug #common_value1
Quote-Tags>Code-Tags
14.05.2016
RSBasic
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
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Zugriff auf Main von innerhalb eines Moduls
Code: Alles auswählen
DeclareModule CommonConstants
; Form
Enumeration FormWindow
EndEnumeration
Enumeration FormGadget
EndEnumeration
Enumeration FormMenu
EndEnumeration
Enumeration FormImage
EndEnumeration
Enumeration FormFont
EndEnumeration
; Event
Enumeration EventCustom #PB_Event_FirstCustomValue
EndEnumeration
Enumeration EventTypeCustom #PB_EventType_FirstCustomValue
EndEnumeration
EndDeclareModule
Module CommonConstants
EndModule
UseModule CommonConstants
Die Enumerationen in der CommonConstants können dabei leer bleiben, wie oben abgebildet!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Zugriff auf Main von innerhalb eines Moduls
Danke, das werde ich so machen
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Re: Zugriff auf Main von innerhalb eines Moduls
Warum überhaupt noch Code außerhalb von Modulen verwalten?
Wie wäre es damit:
Andere Module (wenn das überhaupt nötig ist) könnten dann einfach mit Application::XYZ auf globale Konstanten, Variablen usw. zugreifen.
LG,
Guido
Wie wäre es damit:
Code: Alles auswählen
DeclareModule Application
EnableExplicit
; Global application constants, structures, macros, ...
; ...
Declare Main()
End Main()
EndDeclareModule
Module Application
; Private application constants, structures, macros, ...
; ...
Procedure Main()
Debug #PB_Compiler_Module + "::" + #PB_Compiler_Procedure + " started!"
; ...
Delay(2000)
; ...
Debug #PB_Compiler_Module + "::" + #PB_Compiler_Procedure + " finished!"
EndProcedure
EndModule
LG,
Guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
Re: Zugriff auf Main von innerhalb eines Moduls
Gute Frage, also mirfällt da eigentlich kein Grund ein.helpy hat geschrieben:Warum überhaupt noch Code außerhalb von Modulen verwalten?
Das nächst Program wird also komplett "moduliert"
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Re: Zugriff auf Main von innerhalb eines Moduls
Den Gedanken hatte ich auch schon...
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: Zugriff auf Main von innerhalb eines Moduls
Ich fange alle meine Programme/Tools (wie klein sie auch sein mögen) nun seit einiger Zeit schon so an.
Inzwischen habe ich mich schon so daran gewöhnt, dass sich ohne bereits seltsam anfühlt .
Inzwischen habe ich mich schon so daran gewöhnt, dass sich ohne bereits seltsam anfühlt .
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
Re: Zugriff auf Main von innerhalb eines Moduls
Sorry, wenn ich das hier ausbuddel, aber ich habe mich gerade ähnliches gefragt ("warum kann ich im Modul nicht auf Konstanten des Hauptprogramms zugreifen?"), zumal bei WIN-Api Konstanten offenbar eine Ausnahme gemacht wird.
Die beiden #GG_DATAMODE... Konstanten habe ich in den Hauptscope gelegt, damit ich bei Nutzung des Moduls ohne UseModule einfach...
GraphGadget::Draw(*GHnd, #GG_DATAMODE_INTEGER) schreiben kann und nicht die umständliche Variante
GraphGadget::Draw(*GHnd, GraphGadget::#GG_DATAMODE_INTEGER), wenn ich die beiden Konstanten innerhalb des Moduls deklarieren würde.
So weit, so ungut. Ich kann aus einem Modul heraus also nicht auf selbst deklarierte Konstanten des Hauptprogramms zu greifen.
Auf der anderen Seite geht das mit API-Konstanten sehr wohl.
So ganz kann ich daher die (unvollständige) Abschottung nach außen nicht nachvollziehen.
Klar, wenn man den Zugriff auf sämtliche Konstanten aus einem Modul heraus unterbinden würde, wäre das völlig idiotisch, aber warum die Abschottung bei den selbst definierten Konstanten im Hauptscope? Bei der Verwendung von "fremden" Konstanten kann ich aus dem Modul heraus doch nichts im Hauptscope kaputt machen. Mich würde der Sinn dahinter interessieren.
PS: Ich löse das jetzt damit, dass ich die betreffenden Konstanten zweimal deklariere. Innerhalb und außerhalb des Moduls.
Code: Alles auswählen
Enumeration
#GG_DATAMODE_INTEGER
#GG_DATAMODE_FLOAT
EndEnumeration
DeclareModule GraphGadget
#GG_BORDERSIZE = 1
#GG_BUTTONSGAPSIZE = 5
Declare Draw(*GraphGadget.GraphGadget, iDataMode=#GG_, iDrawButtons.i=#False)
#WM_
EndDeclareModule
Module GraphGadget
;...
EndModule
GraphGadget::Draw(*GHnd, #GG_DATAMODE_INTEGER) schreiben kann und nicht die umständliche Variante
GraphGadget::Draw(*GHnd, GraphGadget::#GG_DATAMODE_INTEGER), wenn ich die beiden Konstanten innerhalb des Moduls deklarieren würde.
So weit, so ungut. Ich kann aus einem Modul heraus also nicht auf selbst deklarierte Konstanten des Hauptprogramms zu greifen.
Auf der anderen Seite geht das mit API-Konstanten sehr wohl.
So ganz kann ich daher die (unvollständige) Abschottung nach außen nicht nachvollziehen.
Klar, wenn man den Zugriff auf sämtliche Konstanten aus einem Modul heraus unterbinden würde, wäre das völlig idiotisch, aber warum die Abschottung bei den selbst definierten Konstanten im Hauptscope? Bei der Verwendung von "fremden" Konstanten kann ich aus dem Modul heraus doch nichts im Hauptscope kaputt machen. Mich würde der Sinn dahinter interessieren.
PS: Ich löse das jetzt damit, dass ich die betreffenden Konstanten zweimal deklariere. Innerhalb und außerhalb des Moduls.
"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.
Re: Zugriff auf Main von innerhalb eines Moduls
Die Konstanten die in den Residents festgelegt sind, sind überall verfügbar, der Rest nicht.
Module sind leider wirklich nur BlackBoxen und zu Code teilen im Forum gedacht.
Module sind leider wirklich nur BlackBoxen und zu Code teilen im Forum gedacht.
Ja, anders geht es auch nicht.Kurzer hat geschrieben:PS: Ich löse das jetzt damit, dass ich die betreffenden Konstanten zweimal deklariere. Innerhalb und außerhalb des Moduls.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure