#PB_Compiler_Version + zusätzlich Betaversion

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

#PB_Compiler_Version + zusätzlich Betaversion

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: #PB_Compiler_Version + zusätzlich Betaversion

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: #PB_Compiler_Version + zusätzlich Betaversion

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: #PB_Compiler_Version + zusätzlich Betaversion

Beitrag 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. ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: #PB_Compiler_Version + zusätzlich Betaversion

Beitrag 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. <)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: #PB_Compiler_Version + zusätzlich Betaversion

Beitrag von Josh »

Danke euch allen. Ich hatte in meiner alten Version ohnehin einen Fehler. Da ich den Präprozessor als Werkzeug verwende, darf ich

Code: Alles auswählen

#PB_Compiler_Home+"Compilers\pbcompiler.exe"
nicht verwenden, sondern muss

Code: Alles auswählen

GetEnvironmentVariable("PB_TOOL_Compiler")
verwenden. Leider hab ich in meinem ersten Beitrag auch nicht erwähnt, dass es sich um ein Werkzeug handelt.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: #PB_Compiler_Version + zusätzlich Betaversion

Beitrag 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
Antworten