![]() |
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:
Sieht ein bisschen so aus, als würde da ein Pointer in der Luft hängen...
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); Grüße, Messie |
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?! |
Re: Programmversion auslesen
Zitat:
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 |
Re: Programmversion auslesen
Code:
if(buffer = new char [i])
{ ... delete[] buffer; } |
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 |
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 11:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz