Einzelnen Beitrag anzeigen

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