Ein Objekt wird nur bei Definitionen oder aus Procedure/Methode-Header gelesen. Deshalb ist empfehlbar, EnableExplicit am anfang des Codes einzufügen, um zu vermeiden, das der PreCompiler die Objekte erkennt.
Leide ist die Fehlerausgabe noch in Deutsch und in Klassen noch nicht ausgereift. So ist es mit dem PreCompiler noch möglich, Methoden doppelt zu verwenden.
Da der PreCompiler noch ne Beta ist, wird jedes mal beim Parsen eine 'pbp_debug.txt'-Datei erstellt wird. Diese enthält den Debug des PreCompilers. Sollte man einfach ignoriren.
Eine Linux-Version ist auch geplant.
Was der PreCompiler für Funktionen momentan besitzt:
- 'Class'/'ClassDLL' / 'EndClass' zum einleiten von Klassen
- 'ClassStructure' / 'EndClassStructure' zum deklamieren oder manuellen erstellen von Klassen
- 'Methode' / 'EndMethode' zum einleiten von Methoden in Klassen oder auserhalb
- verwendung von Modifizierer 'Public', 'Private', 'Protected'
- verwendung von Variablen in allen Modifizierer möglich
- 'NewObject' zum erstellen neuer Objekte (Dieses Keyword ist nur eine art Macro. Es dient nicht zur signalisierung von Objekten. Dies geschieht bei der Definition.)
- 'Extends' für Vererbung (auch Mehrfachvererbung)
Was noch dazu kommt / noch verbessert werden muss:
- Verwendung von Include-Dateien
- Spezielle Methoden: '%ClassName%' und '~%ClassName%' für die Erstellung und Freigabe von Objekten
- Fehlerüberprüfung (momentan kann man noch wild Methoden u. Variablen überschreiben)
- Verwendung von 'Fixed' bei Variablen und 'Virtual' bei Methoden (Keywords können schon angegeben werden, haben noch keine auswirkung)
- Methoden können überschrieben werden (wirkt sich auch auf vererbte Klassen aus!)
- Strukturen in Klassen
- Default-Werte von Variablen
- [...]
Den Download gibt es hier (Zip mit Win32-exe u. Beispiele für die OOP Funktionen).
Hier ist ein kleiner Beispielcode (mehr Beispiele gibt es im Zip):
Code: Alles auswählen
EnableExplicit
Class CMessageDialog
Public
Methode.l ShowDialog()
*this\lResult = MessageRequester(*this\sTitle, *this\sText, *this\dwFlags)
MethodeReturn *this\lResult
EndMethode
Public
sTitle.s
sText.s
dwFlags.l
lResult.l
EndClass
Define *obj.CMessageDialog = NewObject CMessageDialog
*obj\sTitle = "<titel>"
*obj\sText = "Hallo, Welt!"
*obj\dwFlags = 64 ; Info-Meldung
*obj\ShowDialog()
*obj\Free()
End
leonhard