Seite 1 von 1
#PB_Compiler_Version + zusätzlich Betaversion
Verfasst: 02.01.2013 17:52
von Josh
Hallo,
ich verwende einen Präprozessor, wobei ich mit ReadProgramString alle vordefinierten Strukturen und Interfaces auslese. Aus Zeitgründen speichere ich diese in einem temporären Verzeichnis unter einem Dateinamen ergänzt durch den Inhalt aus #PB_Compiler_Version zwischen.
Aus Sicherheitsgründen würde ich diesen Dateinamen gerne mit der Betaversion ergänzen. Hat jemand eine Idee, ob ich per Programm irgendwie herausfinden kann, ob es sich beim PB-Compiler um eine Betaversion (und dann um welche) handelt?
Danke
Josh
Re: #PB_Compiler_Version + zusätzlich Betaversion
Verfasst: 02.01.2013 20:23
von STARGÅTE
Ich würde einfach den CRC32-Fingerprint des Compilers mit an die Version hängen:
Code: Alles auswählen
Debug CRC32FileFingerprint(#PB_Compiler_Home+"Compilers\pbcompiler.exe")
der dürfte sich ja ändern.
Re: #PB_Compiler_Version + zusätzlich Betaversion
Verfasst: 02.01.2013 20:44
von RSBasic
Es geht doch viel einfacher und zwar kannst du mit Hilfe eines Parameters "/version" die vollständige Versionsbezeichnung abfragen.
Code: Alles auswählen
PID = RunProgram(#PB_Compiler_Home+"Compilers\pbcompiler.exe", "/version","", #PB_Program_Open | #PB_Program_Read|#PB_Program_Hide )
If PID
Debug ReadProgramString(PID)
EndIf
Ausgabe hat geschrieben:PureBasic 5.10 Beta 1 (Windows - x86) - (c) 2012 Fantaisie Software
Man braucht dann nur " - (c) 2012 Fantaisie Software" rausschneiden und man hat dann die vollständige Version.
Re: #PB_Compiler_Version + zusätzlich Betaversion
Verfasst: 02.01.2013 21:16
von STARGÅTE
Und ohne das PureBasic wäre es dann:
Code: Alles auswählen
Procedure.s GetCompilerVersion()
Protected Program = RunProgram(#PB_Compiler_Home+"Compilers\pbcompiler.exe", "/version", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
Protected Version.s
If Program
Version = ReadProgramString(Program)
ProcedureReturn Trim(Mid(Version, 10, FindString(Version, "(c)")-13))
EndIf
EndProcedure
Debug GetCompilerVersion()
könnte man sicher noch verfeinern, ob und mit OS-Angabe als Flag usw. ^^
Re: #PB_Compiler_Version + zusätzlich Betaversion
Verfasst: 02.01.2013 21:22
von RSBasic
Code: Alles auswählen
EnableExplicit
Procedure.s GetCompilerVersion()
Protected Program = RunProgram(#PB_Compiler_Home+"Compilers\pbcompiler.exe", "/version", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
Protected Version.s
If Program
Version = ReadProgramString(Program)
CloseProgram(Program)
ProcedureReturn Trim(Mid(Version, 10, FindString(Version, "(c)")-13))
EndIf
EndProcedure
Debug GetCompilerVersion()
Damit die geöffnete Verbindung zum Programm auch wieder sauber geschlossen wird.

Re: #PB_Compiler_Version + zusätzlich Betaversion
Verfasst: 02.01.2013 22:32
von Josh
Danke euch allen. Ich hatte in meiner alten Version ohnehin einen Fehler. Da ich den Präprozessor als Werkzeug verwende, darf ich
nicht verwenden, sondern muss
verwenden. Leider hab ich in meinem ersten Beitrag auch nicht erwähnt, dass es sich um ein Werkzeug handelt.
Re: #PB_Compiler_Version + zusätzlich Betaversion
Verfasst: 03.01.2013 12:49
von Nino
RSBasic hat geschrieben:Code: Alles auswählen
EnableExplicit
Procedure.s GetCompilerVersion()
Protected Program = RunProgram(#PB_Compiler_Home+"Compilers\pbcompiler.exe", "/version", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
Protected Version.s
If Program
Version = ReadProgramString(Program)
CloseProgram(Program)
ProcedureReturn Trim(Mid(Version, 10, FindString(Version, "(c)")-13))
EndIf
EndProcedure
Debug GetCompilerVersion()
Klasse, vielen Dank!
Ich sehe noch eine kleine Verbesserungsmöglichkeit. Die beiden Leerzeichen am Anfang und am Ende des "Versionsstrings" können auch gleich bei Mid() ausgelassen werden, so dass Trim() gar nicht nötig ist:
Code: Alles auswählen
ProcedureReturn Mid(Version, 11, FindString(Version,"(c)")-14)
Grüße, Nino