C++ RegSetValueEX()

@petergate

Cadet 3rd Year
Registriert
Mai 2015
Beiträge
61
Hallo Zusammen,

ich bräuchte heute mal eure Hilfe und zwar schreibe ich gerade ein kleines Programm das mir einen Registryeintrag ändert, und ich habe es auch bis jetzt ganz gut hinbekommen.
Nur habe ich jetzt ein Problem und komme nicht weiter.

Dies ist der Quelltext:
HKEY hKey;

RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Test\\Test1\\Test2\\Settings", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, 0);

BYTE cString[] = "Data Source=Test\\Test;Initial Catalog=Test;Integrated Security=yes;Application Name=Test";
RegSetValueEx(hKey, "ConnectionString", 0, REG_SZ, cString, strlen(cString) + 1);

Ich kriege vollgenden Fehlermeldungen:
Unbenannt.png

Wäre schön wenn da jemand weiter weißt.
Vielen Dank.

MfG @petergate
 
Zuletzt bearbeitet:
als unsignated Char.
 
wie kriege ich es hin das die Funktion diese als unsignated Char ansieht ?
 
Du könntest dein Array einfach zu "char cString[]" ändern.

Edit: Ich habs gerade mal ausprobiert, bei mir nimmt er deinen Code und die Funktion erwartet tatsächlich BYTE bzw uchar.
 
Zuletzt bearbeitet:
wenn ich das mache kriege ich diese Aussage :/

Unbenannt.png
 
Mein Fehler, nicht RegSetValueEx erwartet signed char, sondern strlen.

edit: strlen((const char *) cString) wäre dann das was du suchst. Alternativ kannst du auch mit dem Makro ARRAYSIZE arbeiten, also ARRAYSIZE(cString). Dabei musst du allerdings beachten, dass Strings mit \0 terminiert werden, also entsprechend 1 abziehen von der Länge.
 
Zuletzt bearbeitet:
kann man irgenwie definieren das strlen unsignated char erwartet?
 
danke es funktioniert super, Vielen Dank.

MfG :)
 
Oder einfach std::string verwenden, wenn man schon in C++ programmiert, dann weiß dein String immer wie lang er ist, ohne dass du dazu erst eine Funktion brauchst, die dir das ausrechnet.

Gruß
BlackMark
 
wobei es eine unglaubliche Fummelei ist, std::string mit C-APIs zusammen zu verwenden. Um das Erstellen eines char-Arrays kommt er ja eh nicht herum und hat damit am Ende quasi dasselbe Problem.
 
VikingGe schrieb:
wobei es eine unglaubliche Fummelei ist, std::string mit C-APIs zusammen zu verwenden. Um das Erstellen eines char-Arrays kommt er ja eh nicht herum und hat damit am Ende quasi dasselbe Problem.

Wieso das denn? Für RegCreateKeyEx und RegSetValueEx sehe ich keine Notwendigkeit, char-Arrays zu erstellen. Kannst du deine Bedenken etwas näher erläutern?
 
Zugegeben, ich hab noch nie mit dem Windows-API gearbeitet, aber laut Dokumentation will die Funktion die Daten als nullterminiertes BYTE-Array.

Edit: Okay, std::string hat dafür wohl ne Methode. Kommt davon, wenn man nie mit der STL arbeitet.
 
Zuletzt bearbeitet:
VikingGe schrieb:
Zugegeben, ich hab noch nie mit dem Windows-API gearbeitet, aber laut Dokumentation will die Funktion die Daten als nullterminiertes BYTE-Array.

Edit: Okay, std::string hat dafür wohl ne Methode. Kommt davon, wenn man nie mit der STL arbeitet.

Wenn meine Daten in einem std::string stünden, würde ich in dem Fall einfach mit reinterpret_cast < const BYTE* > ( myString.c_str() ) arbeiten. Der cast ist natürlich nicht besonders hübsch (*), aber RegSetValueEx wird intern (wenn man dwType als REG_SZ angibt) den Pointer eh wieder auf const char* zurückcasten.


(*) Aber wann ist das Arbeiten mit der WIN-API schon hübsch?
 
Zurück
Oben