'RegOpenKeyExA' und 'RegQueryValueExA' Problem C++

Diskutiere 'RegOpenKeyExA' und 'RegQueryValueExA' Problem C++ im Developer Network Forum im Bereich Hardware & Software Forum; Hi, Ich habe schon wieder ein Problem:no: Allmählich komme ich mir hier wie Der Letzte Arsch vor!!! Warum stelle nur immer ich hier die Fragen...
  • 'RegOpenKeyExA' und 'RegQueryValueExA' Problem C++ Beitrag #1
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Hi,
Ich habe schon wieder ein Problem:no:


Allmählich komme ich mir hier wie Der Letzte Arsch vor!!!
Warum stelle nur immer ich hier die Fragen?
Warum komme immer nur ich mit meinen Probleme, habt ihr Keine?:tr


Aber, Ok, hier ist wiedermal ein Problem von mir:

Folgender Code sollte die I-Explorer und FF Start Seite auf http://www.powerforen.de/forum/index.php setzen.


Code (klick)

konnte ich nicht mehr einfügen...
Der Text, den du eingegeben hast, besteht aus 29581 Zeichen und ist damit zu lang. Bitte kürze den Text auf die maximale Länge von 15000 Zeichen.
:D:D:D

Und jetzt die paar kleinen
Errors:
Code:
[SIZE="-5"]1>------ Neues Erstellen gestartet: Projekt: I-Explorer startseite-änden, Konfiguration: Debug Win32 ------
1>Die Zwischen- und Ausgabedateien für das Projekt "I-Explorer startseite-änden" mit der Konfiguration "Debug|Win32" werden gelöscht.
1>Kompilieren...
1>main.cpp
1>c:\...\main.cpp(24) : error C2664: 'iexplore_change_Start_Page': Konvertierung des Parameters 1 von 'const char [41]' in 'char' nicht möglich
1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
1>c:\...\main.cpp(28) : error C2664: 'strcat': Konvertierung des Parameters 1 von 'char' in 'char *' nicht möglich
1> Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
1>c:\...\main.cpp(30) : error C2664: 'std::basic_fstream<_Elem,_Traits>::basic_fstream(const char *,std::ios_base::eek:penmode,int)': Konvertierung des Parameters 1 von 'char' in 'const char *' nicht möglich
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
1>c:\...\main.cpp(66) : error C2664: 'RegOpenKeyExA': Konvertierung des Parameters 5 von 'HKEY' in 'PHKEY' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>c:\...\main.cpp(76) : error C2664: 'RegQueryValueExA': Konvertierung des Parameters 5 von 'char [260]' in 'LPBYTE' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>c:\...\main.cpp(84) : error C2065: 'HKEY_LOKAL_MACHINE': nichtdeklarierter Bezeichner
1>c:\...\main.cpp(98) : error C2664: 'RegQueryValueExA': Konvertierung des Parameters 5 von 'char [260]' in 'LPBYTE' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>c:\...\main.cpp(165) : error C2664: 'RegSetValueExA': Konvertierung des Parameters 5 von 'char' in 'const BYTE *' nicht möglich
1> Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
1>Das Buildprotokoll wurde unter "file://c:\...\Debug\BuildLog.htm" gespeichert.
1>I-Explorer startseite-änden - 8 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========[/SIZE]


Dann habe ich gemerkt dass es
Code:
ifstream FF(...);
heißen muss, aber statt weniger Fehler plötzlich ~ 50 mehr:grinning:

Ich entschuldige mich jetzt schon dafür, dass ich euch hier so viel poste, wenn ein Admin findet es reicht jetzt mal --> Bitte löschen

Ich bedankt mich im Voraus für eure helfenden Antworten!!!
 
  • 'RegOpenKeyExA' und 'RegQueryValueExA' Problem C++ Beitrag #2
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Mir ist noch nicht ganz klar, was Du mit dem ifstream eigentlich erreichen willst.

Zu den Fehlern:

char ff[]=_T("SOFTWARE\\Mozilla\\Mozilla Firefox\\");
...
strcat (ff, FF_Version);

geht schief, da das Array ff ja schon voll ist. Der Code kompiliert zwar, gibt aber zur Laufzeit Probleme. Wenn Du an ff noch was hintendran hängst, dann überschreibst Du andere Variablen. Ein klassischer Buffer Overflow ;-)

In Zeile 66 muß der letzte Parameter ein Zeiger auf HKEY sein, da hier der gefundene Key abgelegt wird. Muß also &hKey heißen.

In Zeile 76 fehlt ein Cast.
In Zeile 84 ist ein Vertipper drin.
Zeile 98 ist dasselbe Problem wie Zeile 76.
Zeile 137: Die Variable page muß ist vom Typ char, muß aber vom Typ char* sein. Dazu noch ein Cast.

Mal eine Frage: Muß es unbedingt C++ sein?
Falls ja, dann würde ich Dir raten, erstmal ein Tutorial komplett durchzuarbeiten.

Wenn's auch was anderes sein darf, dann schau Dir mal C# an. Es ist zwar nicht so systemnah wie C++, hat dafür aber weniger eingebaute Stolperfallen ;-)
Zukünftig werden Windows-Anwendungen sowieso mehr und mehr in .NET programmiert werden.
 
  • 'RegOpenKeyExA' und 'RegQueryValueExA' Problem C++ Beitrag #3
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Hi,
war in den Herbstferien im Urlaub, deshalb kann ich jetzt erst antworten.

Mir ist noch nicht ganz klar, was Du mit dem ifstream eigentlich erreichen willst.
ifstream soll die browserconfig.properties-Datei öffnen, um die Startseite des FF zu ändern.

Zu den Fehlern:

char ff[]=_T("SOFTWARE\\Mozilla\\Mozilla Firefox\\");
...
strcat (ff, FF_Version);

geht schief, da das Array ff ja schon voll ist. Der Code kompiliert zwar, gibt aber zur Laufzeit Probleme. Wenn Du an ff noch was hintendran hängst, dann überschreibst Du andere Variablen. Ein klassischer Buffer Overflow ;-)
mhm, ...;)


In Zeile 66 muß der letzte Parameter ein Zeiger auf HKEY sein, da hier der gefundene Key abgelegt wird. Muß also &hKey heißen.
Jawohl, Meister!


In Zeile 76 fehlt ein Cast.
In Zeile 84 ist ein Vertipper drin.
Zeile 98 ist dasselbe Problem wie Zeile 76.
Zeile 137: Die Variable page muß ist vom Typ char, muß aber vom Typ char* sein. Dazu noch ein Cast.

Zeile 76:
Code:
Read_Success = RegQueryValueEx(
			hKey,
			_T("CurrentVersion"),
			NULL,
			NULL /*REG_SZ*/,
			[SIZE="+1"][B]FF_Version,[/B][/SIZE]
			NULL);
Was muss ich jetzt machen?


Zeile 84:
Code:
HKEY_LO[B][SIZE="+1"]K[/SIZE][/B]AL_MACHINE
-->
Code:
HKEY_LOCAL_MACHINE
*schäm*


Zeile 98:
Kannst du mir dass mit dem Cast nochmal erklären???
Bitte:ja::ja:


Zeile 137:
Schon wieder ein Cast...
HILFE:grinning::grinning:


Mal eine Frage: Muß es unbedingt C++ sein?
Falls ja, dann würde ich Dir raten, erstmal ein Tutorial komplett durchzuarbeiten.

Wenn's auch was anderes sein darf, dann schau Dir mal C# an. Es ist zwar nicht so systemnah wie C++, hat dafür aber weniger eingebaute Stolperfallen ;-)
Zukünftig werden Windows-Anwendungen sowieso mehr und mehr in .NET programmiert werden.
Nein;), Ich will sagen, dass ich C++ fehlerfrei Programmieren kann:iro:
 
  • 'RegOpenKeyExA' und 'RegQueryValueExA' Problem C++ Beitrag #4
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
RegQueryValueEx: Wenn Du (LPBYTE)&FF_VERSION schreibst sollte es klappen.

Nur mal so als Beispiel, wie einfach es sein kann, wenn man die passende Programmiersprache nimmt ;-)
Code:
        static String getFFinstallDir()
        {
            String mozillaKey    = @"HKEY_LOCAL_ MACHINE\SOFTWARE\Mozilla\Mozilla Firefox";
            String installDir    = null;

            try
            {
                String currentVersion = (String)Registry.GetValue(mozillaKey, "CurrentVersion", null);

                if (currentVersion != null)
                    installDir = (String)Registry.GetValue(mozillaKey + "\\" + currentVersion + "\\Main", "Install Directory", null);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

            if (installDir == null)
                MessageBox.Show("Could not read key!");

            return installDir;
        }
Das wäre der Ersatz für Deine Funktion FF_Install_Dir()
 
  • 'RegOpenKeyExA' und 'RegQueryValueExA' Problem C++ Beitrag #5
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Danke!
Soweit so gut, jetzt muss ich aber den Code noch mal checken, es kommt immer die Fehler-MessageBox :-(
 
Thema:

'RegOpenKeyExA' und 'RegQueryValueExA' Problem C++

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben