[gelöst] Versionsinsformationen ausgeben

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

[gelöst] Versionsinsformationen ausgeben

Beitrag von OLLI_S »

Hallo,

ich bin Anfänger und habe eine Frage zu der Versionsinfo meiner Anwendung.
Ich benutze Lazarus 1.2.2 unter Windows 7.

In den Projekteinstellungen habe ich Versionsinformationen eingeschaltet und die Versionsinformationen eingegeben.
Wie kann ich diese Vesions-Informationen meiner Anwendung auslesen?

Danke für Eure Hilfe!

Gruß

OLLI
Zuletzt geändert von OLLI_S am Mo 6. Okt 2014, 22:52, insgesamt 1-mal geändert.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Versionsinsformationen ausgeben

Beitrag von Scotty »


OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Versionsinsformationen ausgeben

Beitrag von OLLI_S »

Hallo,

danke für Deine Hilfe!

Bevor ich meine Frage gepostet habe, habe ich in diesem Forum natürlich nach einer Lösung gesucht (geht ja schneller, als zu fragen und auf die Antwort zu warten) und bin auf folgenden Artikel gestoßen:
http://wiki.lazarus.freepascal.org/GetCurrentVersion/de

Ich habe den Code bei einem Button (OnClick) eingefügt, beim Kompilieren wird der Typ "PVSFixedFileInfo" (bei VAR) nicht erkannt.
Wenn ich dann die Unit "Windows" mit einfüge (in USES) dann werden an anderen Stellen, die vorher ohne Probleme funktioniert haben, Fehler ausgegeben.

Beispielsweise hier:

Code: Alles auswählen

 if DeleteFile((fLogFileName)) = False then

Fehler:

Code: Alles auswählen

fMainForm.pas(182,33) Error: Incompatible type for arg no. 1: Got "AnsiString", expected "PChar"

Daher habe ich diesen Beitrag geschrieben.


Wenn ich den Code aus Deinem Link verwende erhalte ich bei den Variablen-Deklarationen auch Fehlermeldungen:

Code: Alles auswählen

fMainForm.pas(1575,23) Error: Identifier not found "TVersionResource"
fMainForm.pas(1575,23) Error: Error in type definition
fMainForm.pas(1576,24) Error: Identifier not found "TVersionFixedInfo"
fMainForm.pas(1576,24) Error: Error in type definition


Selbstverständlich habe ich die Datei "vinfo.pas" angelegt, sie ist in dem uses Block in meinem Projekt automatisch hinugefügt worden und in meine "Hauptformular" Pascal-Datei ist sie mit Uses auch eingebunden.

Kann mir jemand weiterhelfen?

Gruß

OLLI

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Versionsinsformationen ausgeben

Beitrag von theo »

Ganz allgemeiner Tipp:
Klicke mit Rechts auf den Fehler im Meldungsfenster.
Klicke im Kontextmenu auf "Suche Bezeichner" und schon siehst du Package, Unit und Deklaration.

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Versionsinsformationen ausgeben

Beitrag von OLLI_S »

Hallo,

theo hat geschrieben:Ganz allgemeiner Tipp:
Klicke mit Rechts auf den Fehler im Meldungsfenster.
Klicke im Kontextmenu auf "Suche Bezeichner" und schon siehst du Package, Unit und Deklaration.

Das hat geholfen, danke!
Ich musste nur einige Unites noch in Uses mit aufnehmen:

Code: Alles auswählen

uses
   ...
   versionresource, versiontypes, resource,
   ... 


Ich verwende die Sourcen von http://wiki.lazarus.freepascal.org/Show ... nd_Company die unter "Implementations using FPC 2.6.x " stehen:

Code: Alles auswählen

FUNCTION resourceVersionInfo: STRING;
 
 (* Unlike most of AboutText (below), this takes significant activity at run-    *)
 (* time to extract version/release/build numbers from resource information      *)
 (* appended to the binary.                                                      *)
 
 VAR     Stream: TResourceStream;
         vr: TVersionResource;
         fi: TVersionFixedInfo;
 
 BEGIN
   RESULT:= '';
   TRY
 
 (* This raises an exception if version info has not been incorporated into the  *)
 (* binary (Lazarus Project -> Project Options -> Version Info -> Version        *)
 (* numbering).                                                                  *)
 
     Stream:= TResourceStream.CreateFromID(HINSTANCE, 1, PChar(RT_VERSION));
     TRY
       vr:= TVersionResource.Create;
       TRY
         vr.SetCustomRawDataStream(Stream);
         fi:= vr.FixedInfo;
         RESULT := 'Version ' + IntToStr(fi.FileVersion[0]) + '.' + IntToStr(fi.FileVersion[1]) +
                ' release ' + IntToStr(fi.FileVersion[2]) + ' build ' + IntToStr(fi.FileVersion[3]) + eol;
         vr.SetCustomRawDataStream(nil)
       FINALLY
         vr.Free
       END
     FINALLY
       Stream.Free
     END
   EXCEPT
   END
 END { resourceVersionInfo } ;


Das Ganze funktioniert, ich habe aber noch folgende Fragen:

  • Lazarus kann mit dem "eol" nichts anfangen, dazu finde ich auch keine Deklaration (daher habe ich es weg gelassen).
    Ist das nur ein "End Of Line" oder was anderes?
  • Müssen nach den ganzen ENDs bei den TRY Blöcken keine Strichpunkte sein?
  • Ist das Auslesen der Versionsinformationen wirklich so kompliziert?
    Gibt es nicht einen einfacheren Weg, wie Application.VersionMajor? (also dass man nur die Eigenschaften eines Objektes aufrufen muss)?
Gruß

OLLI

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Versionsinsformationen ausgeben

Beitrag von theo »

1. "LineEnding" geht auch.
2/4. Dinge ändern sich, Dokumentationen nicht immer. Für FPC 2.7.1/trunk ist es wieder anders / einfacher. http://wiki.lazarus.freepascal.org/Show ... .1.2Ftrunk
3. Bei "end" nicht unbedingt. http://wiki.freepascal.org/End

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Versionsinsformationen ausgeben

Beitrag von OLLI_S »

Hallo,

wann kommt denn FPC 2.7.1?

Gruß

OLLI

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Versionsinsformationen ausgeben

Beitrag von Socke »

OLLI_S hat geschrieben:wann kommt denn FPC 2.7.1?

Alle Versionen mit einer ungeraden Zahl an zweiter Stelle sind Entwicklungsversionen. Das heißt: aktuell wird an 2.7.x gearbeitet, welche - sobald es fertig ist - als 2.8.x veröffentlicht wird.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Versionsinsformationen ausgeben

Beitrag von theo »

OLLI_S hat geschrieben:wann kommt denn FPC 2.7.1?


Kannst du haben. Muss man halt von SVN ziehen und selber bauen.
http://svn.freepascal.org/cgi-bin/viewv ... /?root=fpc

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Versionsinsformationen ausgeben

Beitrag von OLLI_S »

theo hat geschrieben:Kannst du haben. Muss man halt von SVN ziehen und selber bauen.
http://svn.freepascal.org/cgi-bin/viewv ... /?root=fpc


Danke für die Info, aber ich warte lieber bis die Version offiziell released wird.

Gruß

OLLI

Antworten