versionsnummer ermitteln
-
Vodn7V schrieb:
(C++ Objektorientiertes Programmieren von Anfang an)
Ist das das von Helmut Erlenkötter? Habe mit dem und seinem C - Buch auch angefangen. Habe bisher auch nur Gutes darüber gehört und mir persönlich hat es auch gut gefallen.
-
habe alles etwas abgespeckt und das array angelegt. aber der fehler ist trotzdem noch da .
#include<iostream> #include<afx.h> #include<cstring> using namespace std; CString GetFileVersionString(const CString FileName) { CString Result = ""; GetFileVersionInfo(FileName,0,0,0); VS_FIXEDFILEINFO *FileInfo; UINT uLen; VerQueryValue(0, "\\", (void**) &FileInfo, (PUINT) &uLen); Result.Format("%d.%d.%d.%d", HIWORD(FileInfo->dwProductVersionMS), LOWORD(FileInfo->dwProductVersionMS), HIWORD(FileInfo->dwProductVersionLS), LOWORD(FileInfo->dwProductVersionLS)); return Result; } int main (void) { char namefile[100]; string name(":\\Dokumente und Einstellungen\\Hereich\\Desktop.test.exe"); strcpy(namefile,name.c_str()); CString FileVersion = "Version: " + GetFileVersionString(namefile); return 0; }
hierbei kommt der gleich konvertierungsfehler wie vorher auch.
########################################################################
habe es etwas anders gemacht. jetzt bekomme ich keine direkte fehlermeldung mehr. beim ausführen jedoch sagt er mir :LINK : fatal error LNK1104: Datei "nafxcwd.lib" kann nicht geoeffnet werden
Fehler beim Ausführen von link.exe.gffgh.exe - 1 Fehler, 0 Warnung(en)
#include<iostream> #include<afx.h> #include<string> using namespace std; CString GetFileVersionString(char *FileName) { // prüfen ob überhaupt Info da sind DWORD nSize = GetFileVersionInfoSize(FileName, 0); CString Result = ""; if (nSize) { char *pInfo = new char[nSize]; // Versionsinfo auslesen GetFileVersionInfo(FileName, 0, nSize, pInfo); VS_FIXEDFILEINFO *FileInfo; UINT uLen; // Root-Information auslesen VerQueryValue(pInfo, "\\", (void**) &FileInfo, (PUINT) &uLen); // Versionsnummer bilden Result.Format("%d.%d.%d.%d", HIWORD(FileInfo->dwProductVersionMS), LOWORD(FileInfo->dwProductVersionMS), HIWORD(FileInfo->dwProductVersionLS), LOWORD(FileInfo->dwProductVersionLS)); // Speicher freigeben (ich bin mir nicht sicher, aber vermutlich zeigt FileInfo auf diesen Datenbereich) delete [] pInfo; } return Result; } int main (void) { char namefile; string name(":\\Dokumente und Einstellungen\\Hereich\\Desktop.test.exe"); strcpy(&namefile,name.c_str()); CString FileVersion = "Version: " + GetFileVersionString(&namefile); return 0; }
-
Wenn du die Daten in ein Array umpacken willst, dann bitte lokal in der Funktion (aktuell werden die Daten beim Funktionsaufruf wieder zurückgeschrieben in einen CString - und damit stehst du an der selben Stelle wie vorher):
CString GetFileVersionInfoString(const CString& fname) { char* fname_l=new char[fname.Length()+1]; strcpy(fname_l,fname); DWORD nSize=GetFileVersionInfoSize(fname_l,0); ... }
-
sorry komme mir schon nervig vor. aber es klappt immer noch nicht. er erkennt das
char* fname_1 = new char [FileName.Length +1];
davon das "Length" nicht : Ist kein Element von 'CString'.
ansonsten siehts jetzt so aus:
#include<iostream> #include<afx.h> #include<string> using namespace std; CString GetFileVersionString(const CString &FileName) { char* fname_1 = new char [FileName.Length +1]; strcpy(fname_1,FileName); // prüfen ob überhaupt Info da sind DWORD nSize = GetFileVersionInfoSize(fname_1, 0); CString Result = ""; if (nSize) { char *pInfo = new char[nSize]; // Versionsinfo auslesen GetFileVersionInfo(fname_1, 0, nSize, pInfo); VS_FIXEDFILEINFO *FileInfo; UINT uLen; // Root-Information auslesen VerQueryValue(pInfo, "\\", (void**) &FileInfo, (PUINT) &uLen); // Versionsnummer bilden Result.Format("%d.%d.%d.%d", HIWORD(FileInfo->dwProductVersionMS), LOWORD(FileInfo->dwProductVersionMS), HIWORD(FileInfo->dwProductVersionLS), LOWORD(FileInfo->dwProductVersionLS)); // Speicher freigeben (ich bin mir nicht sicher, aber vermutlich zeigt FileInfo auf diesen Datenbereich) delete [] pInfo; } return Result; } int main (void) { CString FileVersion = "Version: " + GetFileVersionString(":\\Dokumente und Einstellungen\\Hereich\\Desktop.test.exe"); return 0; }
-
Die Methode heißt GetLength - wie dir ein Blick in die MSDN Library gezeigt hätte. Die runden Klammern darfst du übrigens nicht weglassen.
-
ja habe ich gesehen. auch ausprobiert aber es hat genauso wenig funktioniert. er sagt zwar beim testen 0 Fehler aber wenn ich es Ausführen will kommt immer:nker-Vorgang läuft...
LINK : fatal error LNK1104: Datei "nafxcwd.lib" kann nicht geoeffnet werden
Fehler beim Ausführen von link.exe.testerei.exe - 1 Fehler, 0 Warnung(en)
#include<iostream> #include<afx.h> #include<string> using namespace std; CString GetFileVersionString(const CString &FileName) { char* fname_1 = new char [FileName.GetLength() +1]; strcpy(fname_1,FileName); // prüfen ob überhaupt Info da sind DWORD nSize = GetFileVersionInfoSize(fname_1, 0); CString Result = ""; if (nSize) { char *pInfo = new char[nSize]; // Versionsinfo auslesen GetFileVersionInfo(fname_1, 0, nSize, pInfo); VS_FIXEDFILEINFO *FileInfo; UINT uLen; // Root-Information auslesen VerQueryValue(pInfo, "\\", (void**) &FileInfo, (PUINT) &uLen); // Versionsnummer bilden Result.Format("%d.%d.%d.%d", HIWORD(FileInfo->dwProductVersionMS), LOWORD(FileInfo->dwProductVersionMS), HIWORD(FileInfo->dwProductVersionLS), LOWORD(FileInfo->dwProductVersionLS)); // Speicher freigeben (ich bin mir nicht sicher, aber vermutlich zeigt FileInfo auf diesen Datenbereich) delete [] pInfo; } return Result; } int main (void) { CString FileVersion = "Version: " + GetFileVersionString(":\\Dokumente und Einstellungen\\Hereich\\Desktop.test.exe"); return 0; }
-
Vodn7V schrieb:
er sagt zwar beim testen 0 Fehler
Nicht beim "Testen", sondern beim Kompilieren.
aber wenn ich es Ausführen will kommt immer:nker-Vorgang läuft...
LINK : fatal error LNK1104: Datei "nafxcwd.lib" kann nicht geoeffnet werden
Fehler beim Ausführen von link.exe.Nicht beim Ausführen, sondern beim Linken.
Hast du in den Projekteinstellungen überhaupt die Benutzung der MFC aktiviert?
-
*in arbeit*
-
Dann geh mal auf die Linker-Einstellungen deines Projekts und ergänze dort die "version.lib" unter "Objekt-/Bibliothekmodule" (in der Datei sollten die angegebenen Symbole definiert sein).
-
UNGLAUBLICH !!!! Aber es funktioniert
ich freu mich soVIELEN VIELEN DANK !!!!!!!
Hier nochma der Code:
#include<iostream> #include<afx.h> #include<string> #include<winver.h> using namespace std; CString GetFileVersionString(const CString &FileName) { char* fname_1 = new char [FileName.GetLength() +1]; strcpy(fname_1,FileName); // prüfen ob überhaupt Info da sind DWORD nSize = GetFileVersionInfoSize(fname_1, 0); CString Result = ""; if (nSize) { char *pInfo = new char[nSize]; // Versionsinfo auslesen GetFileVersionInfo(fname_1, 0, nSize, pInfo); VS_FIXEDFILEINFO *FileInfo; UINT uLen; // Root-Information auslesen VerQueryValue(pInfo, "\\", (void**) &FileInfo, (PUINT) &uLen); // Versionsnummer bilden Result.Format("%d.%d.%d.%d", HIWORD(FileInfo->dwProductVersionMS), LOWORD(FileInfo->dwProductVersionMS), HIWORD(FileInfo->dwProductVersionLS), LOWORD(FileInfo->dwProductVersionLS)); // Speicher freigeben (ich bin mir nicht sicher, aber vermutlich zeigt FileInfo auf diesen Datenbereich) delete [] pInfo; } return Result; } int main (void) { CString FileVersion = "Version: " + GetFileVersionString("test.exe"); printf("%s",FileVersion); return 0; }