Was kann mein PreCompiler:
- Unterstützung für OOP
- Erstellung von Fake-Libraries
- Bei der Erstellung von DLLs werden Import-Dateien erstellt
- Erstellung eines PreProcess, der ohne PreCompiler weiterverarbeitet werden kann.
- Original-Dateien werden nicht verändert
- Fehlermeldungen werden von der IDE an der richtigen Stelle angezeigt
- Läuft auf Mac und WIndows
Was sind Include-Libraries
Leider kann ich keine echten Libraries anbieten, das hier kommt am nächsten ran. Der prinzipielle Aufbau einer Include-Library entspricht einer DLL. Der PreCompiler erkennt automatisch in Quellcode, ob diese Library gebraucht wird und fügt automatisch hinzu.
Wie funktioniert OOP?
Ich geh davon aus, dass OOP prinzipiell bekannt ist. Eine Klasse wird so definiert:
Code: Alles auswählen
Interface <Klassenname> [extends <Parent>]
<methode>
EndInterface
Structure s<Klassenname> [extends s<Parent>]
<member>
EndStructure
DeclareClass(<Klassenname>[,<Parent[,AllowNull]])
DefineClass(<Klassenname>[,<Parent[,AllowNull]])
Procedure <Klassenname>_<Methode>(*Self.s<Klassenname> ...)
EndProcedure
Neben den bekannten Methoden gibts eine Reihe von Spezialfällen:
Die Konstruktoren: Bei Erfolg muss ein #true zurückgeben werden.
Code: Alles auswählen
_Constructor(*self)
_ConstructorEx(*self,*para)
<Klassenname>(*self)
<Klassenname>Ex(*self,*para)
Code: Alles auswählen
_Destructor(*self)
De<Klassenname>(*self)
Code: Alles auswählen
_CopyConstructor(*self)
Ein Object wird mit
Code: Alles auswählen
<Klassenname>\new( [*para] )
Freigeben geht mit
Code: Alles auswählen
FreeObject( <Objekt> )
Code: Alles auswählen
CopyObject( <Objekt> )
Weitere Funktionen
Code: Alles auswählen
<Klassenname>\IsAccessable( <Objekt> )
Code: Alles auswählen
<Klassenname>\IsClass( <Objekt> )
Zusätzlich gibt es zwei Konstanten
Code: Alles auswählen
#<Klassenname>_NameTable
#<Klassname>_ParaTable
Nicht benötigte Konstanten werden durch den PreCompiler entfernt, so dass diese eine fertige Exe nicht aufblähen.
Wie erstelle ich eine IncludeLibrary?
Prinzipiell schreibt man eine normale DLL mit ProcedureDLL etc. Der SourceCode für eine solche Library hat idealerweise eine Endung ".pbLib". Der PreCompiler zerlegt dann das ganze und speichert sie ab. Das muss für jede PureBasic-Version durchgeführt werden. Dabei gibt es folgende zusätzliche Befehle:
Code: Alles auswählen
ResidentExport
...
EndResidentExport
Code: Alles auswählen
ExportClass( <Klassenname> )
WICHTIG!
In IncludeLibraries dürfen keine Module verwendet werden. Sie werden auch von PreCompiler entsprechend mit einer Fehlermeldung quittiert.
IncludeLibraries dürfen aber durchaus andere IncludeLibraries benutzen (inklusive deren exportieren Klassen). Wenn man eine Library ändert, sollte man alle davon abhängigen auch neu erstellen.
Was ist das automatische erstellen einer Importdatei bei DLL-Erstellung?
Wenn eine DLL erstellt wird, wird automatisch eine Datei mit einen Import-EndImport-Block erstellt. Der Name ist simpel <DLL-Name>.imp.pb.
Sie liegt da wo die .DLL,.LIB und .EXP (Windows) liegt.
Was muss man beachten
Durch die Art und Weise wie der PreCompiler arbeitet, darf in der ersten Zeile der Hauptdatei keine PreCompiler-Spezifischen Sachen oder IncludeLibraries benutzt werden. In der zweiten Zeile gibt es keine Probleme. Falls man das nicht beachtet, dann bekommt man einen Modul-Fehler.
IncludePath funktioniert mit relativen Angaben mehr in der Hauptdatei. Am besten vermeidet man diesen Befehl einfach komplett.
Der PreCompiler ist für 5.61 und höher geschrieben und geht davon aus, dass mit Unicode compiled wurde. Was anderes geht ja auch nicht.
Bei Libraries gibts die Einschränkung, dass sie nicht in einen Modul sein dürfen. Der PreCompiler verpackt sie dinger ja selbst in Module und Module in Module geht nicht.
Für beides wichtig: UNICODE ist Pflicht!
Wie richte ich den PreCompiler ein - Automatische Version
Einfach eine ausführbare Datei erstellen (ich empfehle einen leeren Ordner) und normal ausführen. Es sollte ein Quicksetup sich öffnen. Da auf Installieren klicken.
Wie richte ich den PreCompiler ein - Manuelle Version
Als erstes sollte man der IDE die Endung "pbLib" beibringen. Unter "File>Preferences..." in Bereich "Editor" "Code file extensions" die Endung "pbLib" hinzufügen.
Den SourceCode für den PreCompiler kompilieren und ihn in Tools-Menü eintragen. Es sind 4 Einträge nötig.
Eintrag 1:
Der erfüllt eine Doppelfunktion. Einmal wird hier der PreCompiler gestartet, wenn man Compile/Run ausführt. Zum anderen kann hiermit ein PreProcess erzeugt werden, wenn man ihn direkt aus den Menü aufruft. Es wird dann eine "<Dateiname>.PreProcess.pb" erstellt.
- Commandline = <Precomiler.exe>
- Arguments = "%FILE" "%COMPILEFILE" "%EXECUTABLE"
- WorkingDirectory = <Verzeichnis wo die FakeLibraries gespeichert werden sollen>
- Name = PreCompiler
- Event to trigger the tool = Before Compile/Run
- Wait until Tools end = Checked
- Commandline = <Precomiler.exe>
- Arguments = "%FILE" "%COMPILEFILE" "%EXECUTABLE"
- WorkingDirectory = <Verzeichnis wo die FakeLibraries gespeichert werden sollen>
- Name = PreCompiler Executable
- Event to trigger the tool = Before Create Executable
- Wait until Tools end = Checked
- Hide Tool from Main Menu = Checked
- Commandline = <Precomiler.exe>
- Arguments = "%FILE" "%COMPILEFILE" "%EXECUTABLE" CreateLib
- WorkingDirectory = <Verzeichnis wo die FakeLibraries gespeichert werden sollen>
- Name = PreCompiler Create Lib
- Event to trigger the tool = Menu or Shortcut
- Commandline = <Precomiler.exe>
- Arguments = "%FILE" "%COMPILEFILE" "%EXECUTABLE" DeleteLib
- WorkingDirectory = <Verzeichnis wo die FakeLibraries gespeichert werden sollen>
- Name = PreCompiler Create Lib
- Event to trigger the tool = Menu or Shortcut
Jetzt muss man nur in Compiler-Menü den Compiler neu starten.
Wichtig zu wissen: Der PreCompiler kann sowohl 32Bit als auch 64Bit sein. Er kann dann beides behandeln. Man muss als nicht für jeder Bit-Version eine eigene Exe erstellen werden. Genauso das Verzeichnis für die FakeLibraries kann für alle gleich sein. Die Namen werden anhand des Betriebsystems und der Compilerversion gewählt und überschneiden sich nicht.
Jetzt gehts weiter mit den Quelldateien.