AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Version der BPL ermitteln

Ein Thema von oki · begonnen am 23. Apr 2009 · letzter Beitrag vom 28. Apr 2009
Antwort Antwort
Seite 2 von 2     12   
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Version der BPL ermitteln

  Alt 24. Apr 2009, 10:21
Push
42
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Version der BPL ermitteln

  Alt 24. Apr 2009, 10:29
Etwas Handarbeit... beim erweitern der BPL eine kleines Programm starten, das die Version der BPL's in eine INC-Datei schreibt, die dann ins Programm eingebunden wird.

Wobei es dafür ja eine Lösung per IDE-Experte geben müsste, der das direkt vorm compilieren erledigt?
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Version der BPL ermitteln

  Alt 24. Apr 2009, 11:07
Zitat von Satty67:
Etwas Handarbeit... beim erweitern der BPL eine kleines Programm starten, das die Version der BPL's in eine INC-Datei schreibt, die dann ins Programm eingebunden wird.

Wobei es dafür ja eine Lösung per IDE-Experte geben müsste, der das direkt vorm compilieren erledigt?
Joop, so hatte ich mir das gedacht.
Jetzt stellt sich für mich nur noch die Frage, wie ich die Inc-Datei automatisch schreiben kann. Ich geb ehrlich zu, dass ich mit Inc-Dateien bis Dato noch nichts am Hut hatte . Kleiner Tipp wie ich die verwende (Wert auslese)?

Gruß oki
42
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#14

Re: Version der BPL ermitteln

  Alt 24. Apr 2009, 11:50
Ich schreib mal über alles was....

Also Includes sind auch nur normale PAS oder Text-Dateien. Die Zeilen darin werden an der entsprechenden Stelle wie Copy&Paste eingefügt. Also ist der Inhalt beliebig, solange er Pascal-Quellcode entspricht (Dateiname ist auch egal, auch wenn *.pas default ist). ...einbinden per {$I XYZ_BBL.VER} and der gewünschen "Paste"-Stelle

Erzeugen sollte ja klar sein... eine Exe, die DLL-Version abfragt und z.B. den Wert als const-Deklaration in die Include-Datei schreibt. z.B.
Code:
const
  XYZ_BPL_Version : Double = 2.9;
Richtig spannend ist, wie diese Exe von der IDE vorm compilieren ausgeführt wird (also ohne manuellem Start). Das müsste gehen und das weis hier auch sicher jemand... nur ich nicht

Noch genialer wäre ein IDE-Experte, der vorm compilieren einen Resource-String in die Resource des zu compilierenden Projekts reinschreibt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#15

Re: Version der BPL ermitteln

  Alt 24. Apr 2009, 12:21
also ohne Experte wohl einfach so
Delphi-Quellcode:
// Projektoptionen > Pre-Build:
CreateBPLVersionInfo.exe


// einbinden / prüfen:
{$INCLUDE "BPLVersion.inc"}

...
Caption := MyBPLVersion;


// die BPLVersion.inc
const MyBPLVersion = '1.2.3.4';
aber besser wohl so ... da hat man auch gleich eine bessere Möglichkeit zu prügen ob die Pre/Post-Build-Ereignisse in den Optionen eingetragen sind
und somit Version möglichst aktuell wäre.
Delphi-Quellcode:
// Projektoptionen > Pre-Build:
CreateBPLVersionInfo.exe "BPL-Name" "MyBPLVersion" "BPLVersion.inc"


// Projektoptionen > Post-Build:
DEL "BPLVersion.inc"


// einbinden / prüfen:
{$INCLUDE "BPLVersion.inc"}
{$IF not Declared(MyBPLVersion))
  {$MESSAGE Error 'MyBPLVersion ist nicht definiert (eventuell Pre/Post-Build-Ereignisse prüffen)'}

{$IFEND}

...
Caption := MyBPLVersion;


// die .INC (z.B. "BPLVersion.inc")
const MyBPLVersion = '1.2.3.4';
CreateBPLVersionInfo.exe bracht ja nur 'ne kleine Consolenanwendung sein, welche die Version ausließt und die .INC erstellt (über die Parameter könnte man dieses dann so gestalten, daß man dieses eine Programm für mehrere BPLs verwenden kann)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Version der BPL ermitteln

  Alt 28. Apr 2009, 10:34
Hi Leute,

erstmal wieder Dank für die Antworten. Sorry, dass ich mich erst so spät melde, aber aus irgend welchen Gründen hatte ich keine Mails über neue Beiträge in dem Thread bekommen. Deshalb hatte ich mich ran gemacht und die Erstellung der inc über ein kleines eigenes Tool getestet. Das habe ich in mein PostBuild aufgenommen. Eigentlich habe ich es genau so bemacht, wie es himitsu beschrieben hat.

Damit klappt das jetzt alles super!

Hier mal der Code meines kleinen Tools:
Delphi-Quellcode:
 (*
  Die Konsolenanwendung generiert eine IncludeDatei, die die Versionsnummer der angegebenen
  BPL ermittelt.
  Zum Aufruf der Anwendung müssen folgende Parameter übergeben werden:
  BPLVersion_inc.exe [BPLName] [DestDir]
  - BPLName
      ist der Name der zu verarbeitenden Datei incl. Pfadangabe
  - DestDir
      ist das Verzeichnis, in dem die Datei angelegt wird. Ist das Verzeichnis nicht
      vorhanden, so wird dieses durch BPLVersion_inc angelegt.
  Der Name der Datei ist BPLVersion_[BPLName].inc

  Die aufzurufende Funktion lautet:
  function GetBPLVersion_[BPLName] : String;

  BPLName ist der Name der BPL ohne Pfad.
*)

program BPLVersion_inc;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes,
  FileVers; // eigene Unit zur Ermittlung der Versionsnummer

var AList : TStringList;
     BPlName, BPlVersion, DestPath, s : String;
    Counter : Integer;
begin
  try
    try
      AList := TStringList.Create;
      BPlName := ParamStr(1);
      DestPath := ParamStr(2);
      ForceDirectories(DestPath);
      if (BPLName = '') or (not FileExists(BPLName)) then begin
        raise Exception.Create('BPL "' + BPLName + '" nicht gefunden!');
      end;
      BPLVersion := GetFileVersionsString(BPLName);
      BPLName :=ExtractFileName(BPLName);
      Counter := 1;
      s := '';
      while (not (BPLName[Counter] = '.')) or (Counter = Length(BPLName)) do begin
        s := s + BPLName[Counter];
        inc(Counter);
      end;
      AList.Add('function GetBPLVersion_' + s + ' : String;');
      AList.Add('begin');
      AList.Add(' Result := ''' + BPLVersion + '''');
      AList.Add('end;');

      AList.SaveToFile(IncludeTrailingPathDelimiter(DestPath) +
        'BPLVersion_' + s + '.inc');
    finally
      AList.Free;
    end;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.
Ich hab mir dabei nicht unbedingt die größten Kopfschmerzen zur Eleganz gemacht. Es funzt und das reicht mir. In meinem Projektquellcode implementiere ich an der entsprechenden Stelle die Compilerdirektive:
{$I BPLVersion_MyBPL.inc} und kann dann auf die Funktion zugreifen. Ich habe das gleich mit den entsprechenden Übergabepareametern versehen, so kann ich für jede BPL eine eigene Inc-Datei mit eigenem Funktionsaufruf generieren. Weitere Tools für andere BPL's sind somit nicht nötig. Das sollte auch mit DLL's gehen, brauch ich aber nicht. Sinnvollerweise sollte der Code des Tools dann dahingehend erweitert werden.

Wie gesagt, in den Projektoptionen das ganze ins PostBuild (BPLVersion_inc.exe "MyBPL" "C:\Programmierung\MyBPLProject").

Dank euch allen noch mals und Gruß

oki
42
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#17

Re: Version der BPL ermitteln

  Alt 28. Apr 2009, 13:25
Zitat von Satty67:
Ich schreib mal über alles was....

Also Includes sind auch nur normale PAS oder Text-Dateien. Die Zeilen darin werden an der entsprechenden Stelle wie Copy&Paste eingefügt. Also ist der Inhalt beliebig, solange er Pascal-Quellcode entspricht (Dateiname ist auch egal, auch wenn *.pas default ist). ...einbinden per {$I XYZ_BBL.VER} and der gewünschen "Paste"-Stelle

Erzeugen sollte ja klar sein... eine Exe, die DLL-Version abfragt und z.B. den Wert als const-Deklaration in die Include-Datei schreibt. z.B.
Code:
const
  XYZ_BPL_Version : Double = 2.9;
Richtig spannend ist, wie diese Exe von der IDE vorm compilieren ausgeführt wird (also ohne manuellem Start). Das müsste gehen und das weis hier auch sicher jemand... nur ich nicht
Da gab es mal Innerfuse Pascal Script und auch RemObjects Pascal Script. Ließe sich damit nicht ein Pascal Interpreter bauen? Der müsste natürlich dann als IDE Experte verfügbar gemacht werden.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#18

Re: Version der BPL ermitteln

  Alt 28. Apr 2009, 14:23
Zitat von schöni:
Zitat von Satty67:
Ich schreib mal über alles was....

Also Includes sind auch nur normale PAS oder Text-Dateien. Die Zeilen darin werden an der entsprechenden Stelle wie Copy&Paste eingefügt. Also ist der Inhalt beliebig, solange er Pascal-Quellcode entspricht (Dateiname ist auch egal, auch wenn *.pas default ist). ...einbinden per {$I XYZ_BBL.VER} and der gewünschen "Paste"-Stelle

Erzeugen sollte ja klar sein... eine Exe, die DLL-Version abfragt und z.B. den Wert als const-Deklaration in die Include-Datei schreibt. z.B.
Code:
const
  XYZ_BPL_Version : Double = 2.9;
Richtig spannend ist, wie diese Exe von der IDE vorm compilieren ausgeführt wird (also ohne manuellem Start). Das müsste gehen und das weis hier auch sicher jemand... nur ich nicht
Da gab es mal Innerfuse Pascal Script und auch RemObjects Pascal Script. Ließe sich damit nicht ein Pascal Interpreter bauen? Der müsste natürlich dann als IDE Experte verfügbar gemacht werden.
Unter D2007 wie gesagt einfach in das PostBuild in den Projektoptionen. Mein altes Delphi 5 kannte das natürlich noch nicht. Wie es bei D7 mit PostBuild steht ... Dann ist das mit dem Automatismus natürlich nicht mehr so automatisch (zumindest einfach).

Für meine Belange und IDE ist es in der beschriebenen Variante aber ideal.

Gruß oki
42
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz