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
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*