Seite 1 von 2

EnableSafeInit()

Verfasst: 02.05.2009 17:39
von cxAlex
InitNetwork(), InitEngine3D(), InitMovie(), InitScintilla()... Alles muss initialisiert werden, aber wenn man die Initialisierung 2* aufruft gibts nen Fehler. Ist schnell mal passiert, ein Include enthält irgendwo ein Init, das MainFile auch .... . Natürlich sollte man so programmieren das sowas nicht vorkommen kann, aber wenn man Includes von 3. aus dem Forum usw. verwendet kann das schon nerven. EnableSafeInit() verhindert das eine Init - Procedure 2* aufgerufen wird. Spart Zeit und Nerven.

Code: Alles auswählen

Macro _EndOfMacro1()
  EndM
EndMacro

Macro _EndOfMacro2()
  acro
EndMacro

Macro EndOfMacro()
:_EndOfMacro1()_EndOfMacro2()
EndMacro 

Macro EnableSafeInit(_Name)
  Procedure _#_Name
    Static isInit
    If Not isInit
      isInit = #True
      ProcedureReturn _Name
    EndIf
  EndProcedure
  
  Macro _Name
   _#_Name
  EndOfMacro()
EndMacro

; Zum Test deaktivieren
EnableSafeInit(InitNetwork())
EnableSafeInit(InitEngine3D())

Debug InitNetwork()
Debug InitNetwork()
Debug InitEngine3D()
Debug InitEngine3D()
Zwar Quick & Dirty aber Nervenschonend :mrgreen:

Gruß, Alex

Verfasst: 02.05.2009 18:39
von STARGÅTE
habe ich etwas unterschlagen ?
---------------------------
PureBasic
---------------------------
Zeile 34: 'EndMacro' fehlt.
---------------------------
OK
---------------------------
Ich habe es monatelang selber ersucht ein Macro in einem Macro zu machen, und bin gescheitert ... du auch ?

EDIT: hab ich, exakt dein Code mit 4.30

Verfasst: 02.05.2009 18:41
von cxAlex
Wenn du das Example von Oben ausführst sollte alles gehen. Es wird mindestens PB 4.3 benötigt.

Verfasst: 02.05.2009 19:02
von ZeHa
Bei mir hat's leider auch nicht funktioniert.

Verfasst: 02.05.2009 19:03
von cxAlex
Komisch....

Ich verwende PB 4.3 x86. Sonst jemand bei dem es nicht geht?

Verfasst: 02.05.2009 19:03
von Kaeru Gaman
hochinteressant.
bei mir läufts anstandslos.


4.30 x86 auf XPpro, keinerlei Userlibs.

Verfasst: 02.05.2009 19:07
von NicknameFJ
Bei mir läuft es auch einwandfrei

(Win XP Home SP3 - PB 4.30)

Grüße

NicknameFJ

Verfasst: 02.05.2009 19:14
von cxAlex
STARGÅTE hat geschrieben: Ich habe es monatelang selber ersucht ein Macro in einem Macro zu machen, und bin gescheitert ... du auch ?
Also bei mir kann ich so Macros mit Macros machen, das funktioniert:

Code: Alles auswählen

Macro _EndOfMacro1()
  EndM
EndMacro

Macro _EndOfMacro2()
  acro
EndMacro

Macro EndOfMacro()
:_EndOfMacro1()_EndOfMacro2()
EndMacro

Macro BuildMacro(_Macro, _MacroLine)
  Macro _Macro
    _MacroLine
  EndOfMacro()
EndMacro

BuildMacro(Add(x,y),x + y)
BuildMacro(Sub(x,y),x - y)

Debug Add(3,2)
Debug Sub(3,2)

Verfasst: 02.05.2009 19:26
von STARGÅTE
jo ich eben nicht... hatte ja auch die idee mit den zusammen bauen von EndM-acro

Aber ich habe imemr wieder ein EndMacro fehlt bekommen, weil ja halt auch eins fehlt

auch so gehts nicht:

Code: Alles auswählen

Macro _EndOfMacro1 
  EndM 
EndMacro 

Macro _EndOfMacro2 
  acro 
EndMacro 

Macro EndOfMacro
_EndOfMacro1#_EndOfMacro2 
EndMacro 

Macro BuildMacro(_Macro, _MacroLine) 
  Macro _Macro 
    _MacroLine 
  EndOfMacro 
EndMacro 

BuildMacro(Add(x,y),x + y) 
BuildMacro(Sub(x,y),x - y) 

Debug Add(3,2) 
Debug Sub(3,2)
selbst wenn cih die Leerzeichen oben entferne gehs nicht.

Verfasst: 02.05.2009 19:31
von STARGÅTE
Ahh jetzt gehts es, aber nur weil wirklich alle Leerzeichen weg sind!
und der : wieder gesetz ist:

Code: Alles auswählen

Macro _EndOfMacro1 
EndM
EndMacro 

Macro _EndOfMacro2 
acro
EndMacro 

Macro EndOfMacro
:_EndOfMacro1#_EndOfMacro2 
EndMacro 

Macro BuildMacro(_Macro, _MacroLine) 
  Macro _Macro 
    _MacroLine
  EndOfMacro 
EndMacro 

BuildMacro(Add(x,y),x + y) 
BuildMacro(Sub(x,y),x - y) 

Debug Add(3,2) 
Debug Sub(3,2)
okee, dann wird ab jetzt einiges Einfacher .... *Includes umschreib*