Seite 1 von 1

Prozeduraufruf im Modul über Makros

Verfasst: 23.08.2014 14:53
von SBond
Hallo Leute,

ich mal wieder einen kleines Problem. Ist es möglich eine Prozedur (innerhalb eines Moduls) über ein Makro aufzurufen, ohne UseModule / UnuseModule zu verwenden?

Folgendes Beispiel:

Code: Alles auswählen

DeclareModule TestMod
	Declare.s Init()
EndDeclareModule

Module TestMod
	Procedure.s Init()
		ProcedureReturn "Init OK"
	EndProcedure
EndModule


; dieses funktioniert:
Macro Modul_Init_1(ModName)
	UseModule ModName
	Debug Init()
	UnuseModule ModName
EndMacro


; dieses funktioniert nicht:
Macro Modul_Init_2(ModName)
	Debug ModName::Init()
EndMacro


; Testen:
Modul_Init_1(TestMod)
Modul_Init_2(TestMod) ; gibt einen Fehler
Ich möchte UseModule / UnuseModule vermeiden, da es unter umständen zu Namenskonflikten kommen könnte. Es ist zwar unwahrscheinlich, aber nicht ausgeschlossen.

viele Grüße,
SBond

Re: Prozeduraufruf im Modul über Makros

Verfasst: 23.08.2014 14:58
von RSBasic

Code: Alles auswählen

DeclareModule TestMod
   Declare.s Init()
EndDeclareModule

Module TestMod
   Procedure.s Init()
      ProcedureReturn "Init OK"
   EndProcedure
EndModule


; dieses funktioniert:
Macro Modul_Init_1(ModName)
   UseModule ModName
   Debug Init()
   UnuseModule ModName
EndMacro


; dieses funktioniert nicht:
Macro Modul_Init_2(ModName)
   Debug ModName#::Init()
EndMacro


; Testen:
Modul_Init_1(TestMod)
Modul_Init_2(TestMod) ; gibt keinen Fehler mehr ;)

Re: Prozeduraufruf im Modul über Makros

Verfasst: 23.08.2014 14:58
von Bisonte

Code: Alles auswählen

Macro Modul_Init_2(ModName)
   Debug ModName#::Init()
EndMacro
Durch rumprobieren erraten ;)

Mist : RSBasic war 9 Sekunden schneller mit posten :lol:

Re: Prozeduraufruf im Modul über Makros

Verfasst: 23.08.2014 15:06
von SBond
...oh nein... das steht sogar in der PB-Hilfe :oops:
Mit der Verwendung von Parametern ist es möglich, sehr flexible Makros zu erschaffen. Das spezielle Verknüpfungszeichen '#' kann benutzt werden, um neue Labels oder Keywords (Schlüsselwörter) durch Mischen von Makro-Code und Parameter-Ausdrücken zu erschaffen (Leerzeichen zwischen jedem Wort werden durch das Verknüpfungszeichen nicht akzeptiert). Es ist auch möglich, Standardwerte für Parameter zu definieren, sodass sie beim Aufruf des Makros weggelassen werden können.
Ich habe mich schon gewundert, warum ab und zu ein '#' auftaucht. Das erklärt jetzt einiges. Vielen Dank euch beiden. Ich hätte besser lesen sollen. <)

viele Grüße,
SBond

Re: Prozeduraufruf im Modul über Makros

Verfasst: 23.08.2014 15:29
von ts-soft
Wenn es um die Initialsierung geht, die Erfolgt automatisch bei erstmaliger Nutzung des Moduls:

Code: Alles auswählen

DeclareModule TestMod
  Declare.s Init()
EndDeclareModule

Module TestMod
  Procedure.s Init()
    ProcedureReturn "Init OK"
  EndProcedure
  
  Init()
EndModule

Re: Prozeduraufruf im Modul über Makros

Verfasst: 23.08.2014 15:35
von Bisonte
Funktioniert doch eigentlich in folgendem Szenario nicht, oder ?

Code: Alles auswählen

; Declare Sektion
DeclareModule TestMod
  Declare.s Init()
EndDeclareModule

; Mega Supertoller Sourcecode

End 

; Prozeduren und Module... 
Module TestMod
  Procedure.s Init()
    ProcedureReturn "Init OK"
  EndProcedure
 
  Init()
EndModule
Sondern nur wenn die Abteilung zwischen "Module" und "EndModule" vor dem supertollen SourceCode stehen würde... sehe ich das richtig ?

Re: Prozeduraufruf im Modul über Makros

Verfasst: 23.08.2014 15:53
von ts-soft
Warum probierste es nicht aus?
Nein, funktioniert nicht.

Re: Prozeduraufruf im Modul über Makros

Verfasst: 23.08.2014 16:16
von SBond
ts-soft hat geschrieben:Wenn es um die Initialsierung geht, die Erfolgt automatisch bei erstmaliger Nutzung des Moduls
Jep. Das ist schon richtig so, aber ich habe es bewusst nicht so gemacht. Der Grund ist folgender: Ich nutze das Makro dahingehend, dass es Module (sind bei mir in einzelnen Dateien) inkludiert. Anschließend wird im jeweiligen Modul eine Prozedur aufgerufen, die Informationen über das Modul zurückgibt (Name, Version, Beschreibung,...).

Ein automatischer Aufruf dieser Prozedur wie in deinem Beispiel würde nicht gehen, da die Prozedur die Informationen ins leere schicken würde. ...oder ich müsste im Modul die Information hinterlegen, wo die Daten hin sollen. ...wäre aber nicht so toll <)

...habe im ersten Post aber bewusst diese Bedingungen weggelassen, um nicht von er Problemstellung abzulenken :)