Precompiler
Übersicht

judosBetreff: Precompiler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen!
Ich habe mal ne Frage was Precompiler angeht. Also ich habe mir gedacht, ich könnte einen Precompiler bauen, der einige Sachen für Blitz3d oder auch Blitz+ vereinfacht. Der erste Versuch war folgender: Ich tausche die blitzcc.exe mit einer eigenen exe aus, die einfach mal die Anfrage weiterleitet. Drückt man also F5 im Blitzbasic, sollte der Precompiler nichts anderes tun, als den ursprünglichen Compiler zu benützen. Das hat allerdings bereits nicht funktioniert. Jetzt frage ich mich was ich daran falsch gemacht habe. Code für den "Pseudo" Precompiler war folgender: BlitzBasic: [AUSKLAPPEN] ;Graphics 800,200,16,2 Habe die Anführungzeichen überall hingetan, also um das Ganze, ganz weggelassen, nur um die Parameter. Hat aber nie funktioniert. Hat jemand vielleicht einige Anregungen oder Vorschläge die mir helfen könnten? Vielen Dank für die Antworten! mfg judos |
||
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bei ExecFile muss das gesamte Konstrukt, also "blitzcc-1.exe" und die Parameter in einen String, wobei du das "blitzcc-1.exe" nicht nochmal in Anführungszeichen setzen darfst. Beispiel:
BlitzBasic: [AUSKLAPPEN] Local file=WriteFile("hi.bat") (Natürlich das CMD-Fenster mit Strg+C schließen, um die Endlosschleife zu verlassen.) Bei dir müsste das dann Folgendes sein: BlitzBasic: [AUSKLAPPEN] start$="blitzcc-1.exe "+c$
|
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
judos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, ohne Anführungszeichen gehts aber leider auch nicht.
BlitzBasic: [AUSKLAPPEN] c$=CommandLine$() Könnte das ein Problem mit dem Pfad sein, oder woran sonst liegt das wohl? Welche Datei führt das Programm am Schluss überhaupt aus? Das ist schon blitzcc.exe oder? mfg judos |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gibst du auch den gesamten, absoluten Pfad an? | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und ganz wichtig ist auch die Environment-Variable "blitzpath" auf den Blitz3D Ordner setzten.
Ich hab auch mal sowas geschrieben, allerdings in C++. Wenn du interessiert bist, kann ich dirs gerne zukommen lassen ![]() In C++ hat man nämlich den Vorteil, dass man die Fehlermeldungen und Debuglogs, die der Compiler an das Programm, von welchem er aufgerufen wurde(also den Precompiler), zurückschickt, auch in die Debugkonsole der IDE zurückgeben kann, was mit Blitz3D nicht möglich ist. |
||
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Execfile(Chr(34)+"C:\Was Auch Immer\blitzcc.exe -parameter"+Chr(34))
Wegen den Leerzeichen. MFG EDIT: Geht nicht? Versteh ich nicht... |
||
judos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also der Pfad bezieht sich auf die blitzcc-1.exe Datei?
Habs mal so probiert: BlitzBasic: [AUSKLAPPEN]
Also der Pfad zur blitzcc original Datei wird angegeben. Die Datei welche gestartet wird, ist automatisch von der Blitz ide, mit dem absoluten Pfad beschrieben. Jetzt scheint es zu funktionieren. Wären da noch 2 kleinere unschöne Sachen: 1. Beim starten eines Programmes sieht man die Ausgabe des Compilers, was ja sonst nicht der Fall ist. Also es erscheint ein MS-Dos Fenster und drinnen steht: "Parsing... Generating... Translating... Assembling... Executing..." -> Das ist mir eigentlich egal. Aber: 2. Wenn ich Blitzbasic starten will und der Compiler bereits mit dem Präcompiler ersetzt ist, welcher die Anfragen einfach weiterleitet (Code siehe oben), dann geht das irgendwie nicht. Also es wird ein Fehler ausgegeben. "Microsoft Visual C++ Runtime Library" - Fenster mit folgendem Text: "Runtime Error! Program: D:\Blitzbasic3d\bin\ide.exe abnormal program termination" Was ziemlich nervig ist. So müsste ich jetzt den Compiler jedesmal umbenennen wenn ich Blitzbasic starten will, und das ist nicht sehr praktisch. Gibts dazu irgendwelche Ideen wie man das noch vermeiden kann? mfg judos |
||
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke er fragt Keywords oder so was ab. Implementiere alle Compiler Parameter und guck dann mal.
MFG EDIT Meine Lösnung für das Pfad-Problem (BlitzPlus) Code: [AUSKLAPPEN] compiler$=Chr(34)+"C:\Program Files (x86)\BlitzPlus\bin\blitzcc.exe"+Chr(34)
param$="-c" file$=Chr(34)+"D:\Dokumente\Test X.bb"+Chr(34) stream=CreateProcess(compiler$+" "+param$+" "+file$) If stream Then While Not Eof(stream) Print ReadLine$(stream) Wend EndIf Notify "Ende" |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Wenn ich Blitzbasic starten will und der Compiler bereits mit dem Präcompiler ersetzt ist, welcher die Anfragen einfach weiterleitet (Code siehe oben), dann geht das irgendwie nicht.
Die Anfrage wird weitergeleitet, aber das Ergebnis nicht zurück. Zu Beginn wird der Compiler von der Standard-IDE ( in IDEal ist dies nicht so ) mit den Parametern "+q +k" aufgerufen(kann auch sein, dass es "-q -k" ist, weiß ich nicht mehr genau). Und hier gibt dann der Compiler eine Liste aller Befehle, inklusive denen aus den Userlibs, zurück. Und hier ist, wie ich oben schon sagte, das Problem: In Blitz3D kann man nicht in die Konsole zurücksenden. |
||
judos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, aber mit Blitzplus sollte das gehen?
Also kann man einfach mit print die Sachen ausgeben, die der Compiler ausgibt und dann sollte es funktionieren? Ich werds später mal testen. Thx für die Antworten! mfg judos |
||
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie willst du der IDE mit Blitz Daten senden? Du kennst ja den Stream nicht, in den die IDE schreibt.
MFG |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist eigentlich umgekehrt. Die IDE ruft per Kommandozeile den Compiler auf und liest die DOS-Rückgabe aus. Nur mit Blitz3D kann man nichts in die Konsole zurückgeben, wie es in BlitzPlus ist ,weiß ich nicht.
In C geht dies ganz simpel mit COut. |
||
judos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also habe mal mit Blitzplus versucht den Präcompiler zu schreiben.
Mit createprocess kann man ja die Ausgabe abfangen und weiterleiten. Allerdings funktioniert das trotzdem nicht. Zudem sind die Parameter die beim Start von Blitzbasic mitgeliefert werden -q und -v. Also "Operiert leise" und "Versionsinfos". Von einer Liste mit Befehlen wird hier überhaupt nichts mitgeliefert. Erscheint mir ziemlich komisch. Kann es sein, dass der Compiler -q anders interpretiert? Mit der Eingabeaufforderung bin ich allerdings auch nicht weiter gekommen. -q zeigt dort einfach eine leere Zeile an und mehr nicht. -> ist print in b+ nicht das gleiche wie cout in c ? mfg judos |
||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
du kannst aber die rückgabe auf ein File umleiten und dann mit B3D einlesen. So habe ich das gelöst. Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
@tft: Ich glaube, du hast den Thread nicht ganz gelesen. Er möchte selbst eine Konsolerückgabe tätigen ![]() Zitat: Mit createprocess kann man ja die Ausgabe abfangen und weiterleiten.
Nein, mit dem Befehl kann man nur die Ausgabe abfangen. Erstell einfach mal eine .exe aus dem CodeBlitzBasic: [AUSKLAPPEN] Print "Test". Dann STRG+R in die cmd rein, und von dort die .exe starten. Wenn sich ein neues Fenster öffnet, dann geht es nicht. Und falls sich kein Fenster öffnet, und "Test" in der CMD steht, liegt dein Fehler wo anders. ![]() Also wenn ich meinen Precompiler dazwischenschalte, ruft die Standard-IDE beim Start folgendes auf: Zitat: C:\Programme\Blitz3D\bin\blitzcc2.exe -q
C:\Programme\Blitz3D\bin\blitzcc2.exe -v C:\Programme\Blitz3D\bin\blitzcc2.exe +k |
||
judos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm stimmt, createprocess kann nur die Ausgabe des Compilers abfragen. Allerdings kann man mit bb keine Rückgabe an die IDE bzw. an blitzbasic.exe oder woher auch immer die Aufrufe beim Start kommen.
Gibt es dafür vielleicht eine Userlib? @Chester: Du erwähnst auch einen selbst geschriebenen Precompiler. Wie hast du dieses Problem gelöst? Oder kann man das irgendwie umgehen? Klar eine eigene IDE schreiben wäre ne Möglichkeit, aber wenn ich das nicht muss, würde ich es gerne umgehen ![]() mfg judos |
||
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
judos, eine Userlib zu machen ist nicht wesentlich einfacher als C++ oder eine .Net-Sprache.
Und was neues lernen kann nie schaden. Was Daten und Anwendungen/Systemnahes angeht ist Blitz so wie so wie so unbrauchbar. Ist leider so. MFG |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: @Chester: Du erwähnst auch einen selbst geschriebenen Precompiler. Wie hast du dieses Problem gelöst? Oder kann man das irgendwie umgehen? Siehe oben:
Chester hat Folgendes geschrieben: Ich hab auch mal sowas geschrieben, allerdings in C++. Wenn du interessiert bist, kann ich dirs gerne zukommen lassen
![]() Zitat: Gibt es dafür vielleicht eine Userlib?
Per Userlib in die Konsole zurückschreiben zu lassen, ist nicht ganz so einfach, wie man sich das vorstellt. Hab es bisher auch nur über einen Umweg hingekriegt, arbeite aber momentan noch dran. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group