versionsnummer ermitteln
-
ok danke. die anführungsstriche sind gesetzt
also alle fehler befinden sich in zeile 10 -->
alle in der ersten :CString GetFileVersionInfo(const CString& FileName)
-
Fehlender Header? (-> "include <afx.h>")
(alternativ nimmst du std::string, dafür hast du ja schon den passenden Header eingebaut - leider hat der kein Äquivalent zur Format()-Methode).
-
GetFileVersionInfo bzw. GetFileVersionInfoA' ist eine Api-Funktion und schon in winver.h definiert!
Du versuchst die Funktion neu zu definieren! Vor allem rufst du deine Funktion innerhalb nochmals auf
GetFileVersionInfo(FileName, 0, nSize, pInfo);
--> wir bestimmt ne Endlosschleife, oder woltest du hier die API aufrufen!
Gib deiner definierten Funktion mal nen neuen Namen!
-
also da ich noch nicht so firm darin bin habe ich mir den quellcode aus dem netzt kopiert. deswegen verstehe ich auch nicht alles kann nur in etwas erahnen was da passiert. ich habe die : #include <afx.h>
angefügt. jetzt ist das eine problem weg. dafuer aber 3 weitere da.\versioninfo.cpp(14) : error C2664: 'GetFileVersionInfoSizeA' : Konvertierung des Parameters 1 von 'const class CString' in 'char *' nicht moeglich
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
\versioninfo.cpp(22) : error C2665: 'GetFileVersionInfoA' : Durch keine der 2 Ueberladungen kann Parameter 1 vom Typ 'const class CString' konvertiert werden
\versioninfo.cpp(49) : error C2065: 'GetFileVersionString' : nichtdeklarierter Bezeichner
\versioninfo.cpp(49) : warning C4129: 'D' : Nicht erkannte Folge von Escape-Zeichen
\versioninfo.cpp(49) : warning C4129: 'H' : Nicht erkannte Folge von Escape-Zeichen
\Desktop\versioninfo.cpp(49) : warning C4129: 'D' : Nicht erkannte Folge von Escape-Zeichen
\Desktop\versioninfo.cpp(51) : warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
Fehler beim Ausführen von cl.exe.EDIT: oder ist es besser nochmal ganz ander anzufangen ? gibt es etwas einfacheres oder besser gesagt verständlicheres fuer den anfang ?
danke
-
ich bekomme es einfach nicht hin
habe das ganze we dran gesessen aber jeden code den ich im net finde funtkioniert nicht. und selbst bekomme ich es nicht hin.
kann mir bitte jemand helfen ??
-
Dann schreib doch mal deinen aktuellen Code hierhin, vielleicht erleichtert das die Fehlersuche.
(was die "nicht erkannte Escapezeichen"-Fehler angeht - \ hat eine Spezialbedeutung in String-Literalen, wenn du es als Zeichen benötigst, mußt du es doppelt schreiben:
GetFileVersionString("C:\\Dokumente und Einstellungen\\Hereich\\Desktop.test.exe")
-
#include<iostream> #include<afx.h> using namespace std; class DatenKlau { public: void OnAuslesen(); }; void DatenKlau::OnAuslesen() { CString GetFileVersionInfo(const CString& 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) { CString FileVersion = "Version: " + GetFileVersionString(":\\okumente und Einstellungen\\Hereich\\Desktop.test.exe"); } }
Fehler :
c:\dokumente ...\dsyd.cpp(18) : error C2601: 'GetFileVersionInfoA' : Lokale Funktionsdefinitionen sind unzulaessig
c:\dokumente .......\dsyd.cpp(53) : error C2601: 'main' : Lokale Funktionsdefinitionen sind unzulaessig
Fehler beim Ausführen von cl.exe.dsyd.obj - 2 Fehler, 0 Warnung(en)
-
Du darfst in C++ Funktionen nicht verschachteln. Deine Einrückung ist übrigens grauenhaft.
-
#include<iostream> #include<afx.h> using namespace std; class DatenKlau { public: void OnAuslesen(); }; void DatenKlau::OnAuslesen() { CString GetFileVersionInfo(const CString& FileName) { // prüfen ob überhaupt Info da sind DWORD nSize = GetFileVersionInfoSize(FileName, 0); CString Result = ""; return Result; } int main (void) { CString FileVersion = "Version: " + GetFileVersionString(":\\Dokumente und Einstellungen\\Hereich\\Desktop.test.exe"); 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; } } }
habe es auch anders versucht. die fehler bleiben die gleichen.
ist der code denn sonst so korrekt ?
-
MFK schrieb:
Du darfst in C++ Funktionen nicht verschachteln.
Was ist an dieser Aussage nicht zu verstehen?
Du mußt die "GetFileVersionInfo()" (bist du sicher, daß die nicht "..String() heißen sollte?) aus der Datenklau::OnAuslesen() rausnehmen:
CString GetFileVersionString(const CString& fname) { ... } int main() { CString ver = GetFileVersionString(":\\Dokumente und Einstellungen\\Hereich\\Desktop.test.exe"); ... return 0; }
-
Zudem fehlt vor int main noch eine Klammer }.
Daher die Fehlermeldungen mit lokalen Funktionsdefinitionen.
-
Warum helft ihr jemandem beim Auslesen einer Versionsnummer der offensichtlich noch nicht mal C++ Grundlagen kann?
-
ich bin noch nicht lange dabei wie man sicherlich sehr schnell erkennen kann. ich habe jetzt 2 c++ bücher durchgearbeitet. mit fehlt einfach die praxis und dachte das ich mir durch solche aufgaben etwas mehr von dieser aneignen kann.
ich finde es sehr nett das mir so geholfen wird.
-
Außerdem ist dieses Forum ja auch dafür da. Jeder fängt mal klein an.
-
Paul_C. schrieb:
Außerdem ist dieses Forum ja auch dafür da. Jeder fängt mal klein an.
Dafür ist das Visual C++/MFC Forum mit Sicherheit nicht da.
-
was denn nu ?!
hatte es erst auch ins c++ forum gepostet aber es wurde dann hierher verschoben. also dafuer kann ich nichts. naja ich werd ma zusehen wie ich das noch hinbekomme.
-
Dein Problem ist hier schon ganz richtig. Aber du bist es IMHO nicht, weil du noch ziemlich große Lücken bei den Grundlagen hast. Deine Bücher können nicht so toll gewesen sein. Hier sind ein paar gute Tutorials verlinkt, vielleicht solltest du dir die mal antun.
-
ja ich habe mir am FR diese buch ersteigert. kann mit büchern irgendwie besser als mit tuts.
(C++ Objektorientiertes Programmieren von Anfang an)ich hoffe trotzdem das ihr mir bis dahin weiterhelfen könnt. wenn das buch da ist werde ich das erstmal durchackern. versprochen!!
#include<iostream> #include<afx.h> #include<string> using namespace std; CString GetFileVersionString(const CString& 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) { CString FileVersion = "Version: " + GetFileVersionString(":\\Dokumente und Einstellungen\\Hereich\\Desktop.test.exe"); return 0; }
c:\dokume.....pp(11) : error C2664: 'GetFileVersionInfoSizeA' : Konvertierung des Parameters 1 von 'const class CString' in 'char *' nicht moeglich
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
c:\dokumen....dsyd.cpp(19) : error C2664: 'GetFileVersionInfoA' : Konvertierung des Parameters 1 von 'const class CString' in 'char *' nicht moeglich
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
Fehler beim Ausführen von cl.exe.dsyd.obj - 2 Fehler, 0 Warnung(en)
-
Du hast dir ein sehr schlechtes Buch bestellt.
-
wieso das denn ? ich dachte es sei grade gut für anfänger. habe viele gute sachen darüber gelesen. warscheinlich ist es auch geschmackssache oder ? nicht definitiv schlecht odeR?