Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C++ Programmversion auslesen (https://www.delphipraxis.net/71321-programmversion-auslesen.html)

messie 13. Jun 2006 09:52


Programmversion auslesen
 
Ich möchte gerne mit BCB die Version meines Programms auslesen. Beispiele für Delphi gibt es hier einige, die habe ich auch schon mal verwendet. Im BCB klemmt es noch: ich bekomme unsinnige Anzeigen, die sich auch mit jedem Aufruf ändern.
So sieht der Code aus:
Code:
AnsiString s;
  char *buffer;
  unsigned char version;
  unsigned int i;
  DWORD handle;        // Dummy
  unsigned int Len;    // Dummy

  s = Application->ExeName;
  i = GetFileVersionInfoSize(s.c_str(),&handle);
  buffer = new char [i];
  GetFileVersionInfo(s.c_str(),0,i,buffer);
  VerQueryValue(buffer, "\\StringFileInfo\\040704E4\\FileVersion" ,(void **) &version, &Len);
  ShowMessage(version);
Sieht ein bisschen so aus, als würde da ein Pointer in der Luft hängen...

Grüße, Messie

Olli 15. Jun 2006 09:19

Re: Programmversion auslesen
 
Also erstmal wird "buffer" nicht getestet, die Allozierung könnt auch fehlschlagen.

Hast du "\\StringFileInfo\\040704E4\\FileVersion" vorher enumeriert, so daß du sicher sein kannst, daß es exakt diesen Eintrag auch gibt?!

messie 15. Jun 2006 14:07

Re: Programmversion auslesen
 
Zitat:

Zitat von Olli
Hast du "\\StringFileInfo\\040704E4\\FileVersion" vorher enumeriert, so daß du sicher sein kannst, daß es exakt diesen Eintrag auch gibt?!

Hallo Olli,
die StringFileInfo funzt so unter Delphi. Da es eine API-Funktion ist gibt es für mich keinen Grund dort andere Daten zu erwarten. Dazu kommt der Effekt, daß sich die Ausgabe von Mal zu Mal ändert, deshalb vermute ich den Fehler woanders.
Zur Allokation von buffer: wie kann ich die denn prüfen? Denn new gibt ja keinen Wert zurück. Muß ich da über lasterror o.ä. gehen?

Grüße, Messie

Olli 15. Jun 2006 14:45

Re: Programmversion auslesen
 
Code:
if(buffer = new char [i])
{
...
  delete[] buffer;
}

messie 16. Jun 2006 08:59

Re: Programmversion auslesen
 
Tja, new scheint nicht zu funktionieren trotzdem die Zeile true liefert. Aber der Onlinedebugger zeigt eine nicht reale Adresse für buffer an - oder gibt es neuerdings einen Adreßraum mit Backslash? Auch das delete erzeugt eine accessviolation.
Muß also an der Zuweisung new char[] liegen. Aber die Länge von 1260 Byte für den Fileinforecord habe ich in Delphi auch, daran kann es nicht liegen.

Grüße, Messie

Olli 16. Jun 2006 09:06

Re: Programmversion auslesen
 
Nimm halt eine andere Funktion um den Speicher zu allozieren ... ich glaube den Versuch ist's allemal wert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 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