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

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.

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