externe Procedure in ein Module verwenden

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

externe Procedure in ein Module verwenden

Beitrag von marcelx »

Hallo,
wie kann ich subM in der module modx verwenden ?
Oder ein Procedure aus ein IncludeFile

Code: Alles auswählen

DeclareModule modX
  Declare CreateFerrari()
EndDeclareModule

Module modX
  Procedure CreateFerrari()
    Debug "CreateFerrari()"
    subM("modx") ; Geht nicht
  EndProcedure
EndModule

UseModule modX

Procedure SubM(x.s)
  Debug "Sub:"+x
EndProcedure

subM("Main")

CreateFerrari()
EDIT:
aus PB-Hilfe: "Auf Elemente aus dem Hauptcode wie Prozeduren, Variablen, etc. kann innerhalb des Moduls nicht zugegriffen werden, auch wenn sie als global deklariert wurden."
Wie ich es sehe muss ich die extern Procedure in ein Modul packen
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: externe Procedure in ein Module verwenden

Beitrag von Olafmagne »

Hallo,

Ja,
ein Module als "Schnittstelle"
im Declare-Teil die besagte Procedure declarieren,und im Module-Teil der 'modx' ein UseModule und schon ist die Procedure nutzbar.
Wenn die Procedure auch im Haupt-Programm genutzt werden soll,dann auch ein UseModule imHaupt-Code.

Geht natürlich auch mit "ModuleName::Proc", Wie du willst.

Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: externe Procedure in ein Module verwenden

Beitrag von Bisonte »

Teilweise richtig. So wie MarcelX es beschreibt geht das geht schlichtweg gar nicht !
Module können nur Prozeduren aus vorher definierten Modulen verwenden.
Also schreibe ein Modul, in dem deine "Procedure SubM()" vorhanden ist und rufe sie entweder per Usemodule oder direkt mit Modulname::SubM() auf.
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: externe Procedure in ein Module verwenden

Beitrag von Olafmagne »

Bisonte hat geschrieben: 20.05.2021 22:57 Teilweise richtig. So wie MarcelX es beschreibt geht das geht schlichtweg gar nicht !
Module können nur Prozeduren aus vorher definierten Modulen verwenden.
Also schreibe ein Modul, in dem deine "Procedure SubM()" vorhanden ist und rufe sie entweder per Usemodule oder direkt mit Modulname::SubM() auf.
:o
Öhm-
Das meinte ich doch, hab mich auf seine Aussage, ein weiteres Module zu nutzen, bezogen.
marcelx hat geschrieben: EDIT:
aus PB-Hilfe: "Auf Elemente aus dem Hauptcode wie Prozeduren, Variablen, etc. kann innerhalb des Moduls nicht zugegriffen werden, auch wenn sie als global deklariert wurden."
Wie ich es sehe muss ich die extern Procedure in ein Modul packen
Eben ein Module definieren, besagte Function öffentlich declarieren, und in seiner(schon vorhandenen xmod-Module) einbinden.

Nunja, vielleicht etwas 'unglücklich' Ausgedrückt. :oops:
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: externe Procedure in ein Module verwenden

Beitrag von mk-soft »

Wenn man Funktionen, Variablen, Konstanten, etc Global und in Modulen benötigt, ein Modul Common erstellen und mit UseModule Common in MainScope und in Modulen aktivieren.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
helpy
Beiträge: 635
Registriert: 29.08.2004 13:29

Re: externe Procedure in ein Module verwenden

Beitrag von helpy »

... oder komplett auf den Mainscope verzichten ;-) und ausschließlich mit Modulen arbeiten:

Code: Alles auswählen

DeclareModule Application
	EnableExplicit
EndDeclareModule
Module Application
	Procedure MAIN()
		; and here the main program
	EndProcedure
	End MAIN()
EndModule
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Axolotl
Beiträge: 146
Registriert: 31.12.2008 16:34

Re: externe Procedure in ein Module verwenden

Beitrag von Axolotl »

Hat das Module Konzept eigentlich Auswirkungen auf Programmeigenschaften wie bspw. Programgröße oder Programmausführungsgeschwindigkeit?
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: externe Procedure in ein Module verwenden

Beitrag von GPI »

Ich wüsste nicht wieso sie das haben sollte.
Statt Modulen könntest du auch mit prefixen arbeiten.

also statt "modul::variablename" könntest du überall "modul_variablename" schreiben und stark vereinfacht macht der Compiler genau sowas.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: externe Procedure in ein Module verwenden

Beitrag von Olafmagne »

GPI hat geschrieben: 28.05.2021 11:23 Ich wüsste nicht wieso sie das haben sollte.
Statt Modulen könntest du auch mit prefixen arbeiten.

also statt "modul::variablename" könntest du überall "modul_variablename" schreiben und stark vereinfacht macht der Compiler genau sowas.
Dann ist aber keine Kapselung von Variablen und Proceduren mehr gegeben!

Der Vorteil von Modulen sehe ich in erster Linie darin, dass man nur das "sieht", was im DeclareModule-Teil declariert ist!
dadurch kann ich ein "Object erstellen, ohne alles im Main-Code zu definieren.
ist zwar kein OOP, aber das GrundPrincipe ist zu erkennen.
Einmal geschrieben,ist es immer wiederverwendbar
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Axolotl
Beiträge: 146
Registriert: 31.12.2008 16:34

Re: externe Procedure in ein Module verwenden

Beitrag von Axolotl »

Sorry, ich wollte keine Diskussion über Module lostreten. Ich nutze die Möglichkeit von 'Module' nicht.
Hatte gedacht, dass sich bei wiederholtem "UseModule" in allen weiteren Modulen der Code vervielfältigt.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Antworten