Versionsnummer der Andwendung auslesen
-
Hallo zusammen,
leider hat mein durchforsten der Hilfe (weder im Forum noch im BCB) etwas gebracht, deswegen hier meine Frage:
Wie kann ich die Versionsnummer meines Programms auslesen (welche ich ihm über die Projektoptionen gegeben habe)? Ich dachte, daß evtl. "Application->" was bietet, aber dem war wohl nicht so
Für eure Hilfe wäre ich euch sehr dankbar.
Mipe
-
Ganz einfach
bool TAboutBox::GetVersion() { char szBuf[256]; char text[2048]; DWORD dwVersionInfoHandle, dwVersionSize; void FAR*lpvVersionData; void *lpBuffer; unsigned short lt_data[2]; BOOL b; unsigned char lt[9]; sprintf(text, "Version : "); dwVersionSize = GetFileVersionInfoSize(Application->ExeName.c_str(), &dwVersionInfoHandle); if (dwVersionSize != 0) { lpvVersionData = malloc(dwVersionSize); if (lpvVersionData == NULL) { return FALSE; } b =GetFileVersionInfo(Application->ExeName.c_str(), dwVersionInfoHandle, dwVersionSize, lpvVersionData); if (b) { b = VerQueryValue(lpvVersionData, "\\VarFileInfo\\Translation", &lpBuffer, (UINT FAR*)&dwVersionSize); if (b && dwVersionSize!=0) { lt_data[0] = ((unsigned short*)lpBuffer)[0]; lt_data[1] = ((unsigned short*)lpBuffer)[1]; if (dwVersionSize == 2) { sprintf(lt, "0409%04x", lt_data[0]); lt_data[1] = 0; } else { sprintf(lt, "%04x%04x", lt_data[0], lt_data[1]); } START_INFO: sprintf(szBuf, "\\StringFileInfo\\%s\\FileVersion", lt); b = VerQueryValue(lpvVersionData, szBuf, &lpBuffer, (UINT FAR*)&dwVersionSize); if (b && dwVersionSize) { strcat(text, (char*)lpBuffer); strcat(text, "\n"); } else if (!lt_data[0] || !lt_data[1]) { // länderneutral ? strcpy(lt, "040904e4"); // dann hiermit versuchen lt_data[0] = lt_data[1] = 1; goto START_INFO; } Version->Caption=text; } } free(lpvVersionData); } return true; }
Gruß Rainer
-
diese Version http://www.bytesandmore.de/rad/cpp/snipp/sc06001.php finde ich wesentlich übersichtlicher
-
Stimmt !!!
Rainer
-
UNd wenn wir schon dabei sind: Wir verwenden hier C++ und kein C also weg mit malloc/free und her mit new/delete...
Aus Gründen der Wiederverwendbarkeit ist es ausserdem zu empfehlen diese FUnktion so zu konzipieren, dass sie einfach nur einen Rückgabewert liefert und nicht einfach Werte in einem Formular ändert...
Ausserdem könnte man auch auf das - etwas unschöne - goto verzichten...
-junix