Announcement

Collapse
No announcement yet.

Versionsinformationen einer DLL ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Versionsinformationen einer DLL ermitteln

    Hallo,<br>
    <br>
    kann mir jemand sagen, wie ich aus DLL-Dateien die Versionsinformationen auslesen kann. Folgende Funktion funktioniert leider nur für EXE-Dateien.<br>
    <br>
    // Versionsinformationen aus EXE-Datei auslesen<br>
    // Schlüssel: CompanyName, FileDescription, FileVersion, InternalName,<br>
    //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LegalCopyRight , OriginalFileName, ProductName, ProductVersion<br>
    // Aufrufbeispiel: s:= GetVersionInfo(Application.ExeName, 'FileVersion');<br>
    function GetVersionInfo(FileName, Key: string): string;<br>
    const<br>
    &nbsp;vqvFmt&nbsp;&nbsp;= '\StringFileInfo\%4.4x%4.4x\%s';<br>
    var<br>
    &nbsp;vlen&nbsp;&nbsp;&nbsp;: DWord;<br>
    &nbsp;FInfoSize : longint;<br>
    &nbsp;FInfo&nbsp;&nbsp; : pointer;<br>
    &nbsp;FLang&nbsp;&nbsp; : PInteger;<br>
    &nbsp;FLangNum&nbsp;: integer;<br>
    &nbsp;vptr&nbsp;&nbsp;&nbsp;: pchar;<br>
    begin<br>
    &nbsp;Result:= '';<br>
    &nbsp;FInfoSize:= GetFileVersionInfoSize(pchar(FileName), vlen);<br>
    &nbsp;if FInfoSize > 0 then begin<br>
    &nbsp;&nbsp;GetMem(FInfo, FInfoSize);<br>
    &nbsp;&nbsp;if GetFileVersionInfo(pchar(FileName), vlen, FInfoSize, FInfo) then begin<br>
    &nbsp;&nbsp;&nbsp;VerQueryValue(FInfo, '\VarFileInfo\Translation', pointer(FLang), vlen);<br>
    &nbsp;&nbsp;&nbsp;FLangNum:= vlen div 4;<br>
    &nbsp;&nbsp;&nbsp;if VerQueryValue(FInfo,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pchar(Format(v qvFmt,[LoWord(FLang^), HiWord(FLang^), Key])),<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointer(vpt r), vlen) then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;Result:= vptr;<br>
    &nbsp;&nbsp;end;<br>
    &nbsp;&nbsp;FreeMem(FInfo, FInfoSize);<br>
    &nbsp;end;<br>
    end;<br>

  • #2
    Hallo,

    ich habe das zum Test einmal nachgebaut, bei mir wird die Versionsnummer 1.2.3.4 auch bei einer DLL ausgelesen:
    <pre>
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowMessage(GetVersionInfo('E:\ABLAGE\Project1.dll ', 'FileVersion'));
    end;
    </pre>
    Wird in der DLL auch die RES-Datei mit den Versionsinformationen eingebunden

    Comment


    • #3
      Hallo Herr Kosch,<br>
      oha, habe eben auch festgestellt, dass mein Code ja in Ordnung war, aber zufaellig alle zunaechst getesteten DLLs keine Versionsinfos enthielten. Habe dann gleich eine DLL gefunden, bei der es funktionierte. <br>
      Trotzdem vielen Dank fuer Ihr Feedback

      Comment


      • #4
        Hallo,

        Wenn ich den Code mit Delphi 5 compiliere, so erhalte ich folgenden Hinweis:
        Auf 'FLangNum' zugewiesener Wert wird niemals benutzt.

        Brauche ich diese Quellcodezeile aus dem allerersten Posting?

        Es wäre schön, wenn einer den Code aus dem ersten Posting in einfacher Weise erklären könnte. Wie kann man sich so ein Wissen beibringen? Gibt es Literatur?

        Grüsse,
        Carste

        Comment


        • #5
          Hallo,

          &gt;Gibt es Literatur?

          Selbstverständlich - Microsoft dokumentiert diese Zusammenhänge sehr ausführlich in den Hilfedateien des <i>Microsoft Platform SDK</i> bzw. in der <i>MSDN Library</i>.

          Eine Datei oder einem ausführbaren Modul können Daten in Form der sogenannten Ressourcen hinzufügt werden. Delphi nutzt dies zum Beispiel aus, indem jedem Projekt über <i>{$R *.res}</i> eine automatisch generierte Ressourcendatei hinzugefügt wird. In dieser RES-Datei landen zum Beispiel auch die Informationen, die man im Dialogfenster für die Versionsbeschreibung eintippt.

          Da Microsoft immer davon ausgeht, dass eine Software weltweit eingesetzt wird, unterstützen die beteiligten Win32-API-Funktionen auch mehrere Sprachen, so dass ein Programm die Daten in der benötigten Landessprache des Anwenders anfordern kann. Wenn man diesen Aufwand nicht treiben möchte, kann man nur auf den englischen Sprachteil der Ressourcen zurückgreifen, denn diese Sprache sollte immer vorhanden sein (wenn man sich an die Regeln hält)

          Comment


          • #6
            Delphi legt die Versionsresourcen mit der SprachID der Sprache der Delphi IDE an. Englisches Delphi = englisch, deustsches Delphi = deutsch. Zumindest habe ich das so in Erinnerung

            Comment

            Working...
            X