Forum: PC-Programmierung C++ Registry hilfe bei DWORD


von Marcel H. (repac3r)


Lesenswert?

Guten tag liebe com,
ich versuche derzeit über die Registy den Proxy zu deaktivieren, bzw. 
aktivieren.

Laut der Registry hat der Wert den Typ Reg_DWORD.
Also habe ich auch verusuch mit DWORD ein Wert zu ändern:
1
RegSetValueEx(hKey,Key,0,REG_DWORD,(BYTE*)"0x00000000",200);
Jedoch wird dann in der Registry der Wert als unbekannter DWORD Typ 
angezeigt. Ich denke ja mal das ich irgendwas falsch mache und das BYTE* 
dort wahrscheinlich garnicht hingehört, aber wenn dort direkt ein DWORD 
Wert reinschreibe, wir das ganze erst garnicht Compiliert. Dort kommt 
dann die Fehlermeldung das der Typ nicht in const char konvertiert 
werden kann...


lg, repac3r

von Peter II (Gast)


Lesenswert?

> (BYTE*)"0x00000000",

was soll das auch darstellen?

von Marcel H. (repac3r)


Lesenswert?

Peter II schrieb:
>> (BYTE*)"0x00000000",
>
> was soll das auch darstellen?

Den Wert den ich in die Regstry schreiben möchte, genau dort ist ja mein 
Problem, das da ein ungültiger Wert kommt.

von Peter II (Gast)


Lesenswert?

Marcel Hoffmann schrieb:
> Peter II schrieb:
>>> (BYTE*)"0x00000000",
>>
>> was soll das auch darstellen?
> Den Wert den ich in die Regstry schreiben möchte, genau dort ist ja mein
> Problem, das da ein ungültiger Wert kommt.

dann denke doch mal nach, Warum sollte man überhaupt einen DWORD wert 
als STRING übergeben und dann auf eine Byte array casten.

auch die nächste Parameter ist Unsinn.

Warum übergibst du nicht einfach die zahl als zahl?

von Marcel H. (repac3r)


Lesenswert?

Habe das ganze mal ein bisschen abgeändert:
1
    DWORD byte = "0x0000001";
2
    HKEY hKey ;
3
    RegOpenKeyEx (HKEY_CURRENT_USER, KPath, 0, KEY_SET_VALUE, &hKey);
4
    RegSetValueEx(hKey,Key,0,REG_DWORD,(BYTE*)&byte, sizeof(DWORD));

Leider funktioniert dies auch nicht dort wird mir schon beim definieren 
der Variable byte, des Fehleer angezeigt, dass sich const char[10] nicht 
in DWORD konvertieren lässt.

von Peter II (Gast)


Lesenswert?

Marcel Hoffmann schrieb:
> DWORD byte = "0x0000001";

fange doch erstmal an C oder C++ zu lernen bevor du in der Registry 
arbeitest.

Was soll diese Zeile deiner Meinung nach darstellen?

von ich (Gast)


Lesenswert?

Vielleicht als "const char Byte" angeben?

von Marcel H. (repac3r)


Lesenswert?

Peter II schrieb:
> Marcel Hoffmann schrieb:
>> DWORD byte = "0x0000001";
>
> fange doch erstmal an C oder C++ zu lernen bevor du in der Registry
> arbeitest.
>
> Was soll diese Zeile deiner Meinung nach darstellen?

Ja den Wert die ich in der Registry schreiben möchte, habe ich ja oben 
schon beschrieben.

von Peter II (Gast)


Lesenswert?

"0x0000001" ist aber eine String und keine zahl

von Karl H. (kbuchegg)


Lesenswert?

Marcel Hoffmann schrieb:
> Habe das ganze mal ein bisschen abgeändert:

>     DWORD byte = "0x0000001";

EIn DWORD ist auch nichts anderes als eine Zahl.
Also weiß doch den ganzen eine Zahl zu und KEINEN String!
Wo ist denn das Problem bei

DWORD byte = 5;
oder
DWORD byte = 8;
oder eben von mir aus
DOWRD byte = 0x00000001;

Eben. Es gibt kein Problem. Zahl ist Zahl. Ob du die als Dezimalzahl 
schreibts, oder als Oktalzahl oder eben als Hexadezimalzahl spielt doch 
keine Rolle. Es ist eine Zahl.
Aber ein String ist KEINE Zahl! Ein String ist in erster Linie Text. Und 
der Text kann genausogut "Otto" lauten, wie er auch "0x00000001" lauten 
kann. Aber nur weil dich letzterer String an eine Zahl errinnert, macht 
das den String noch lange nicht zur Zahl.

Oder schreibst du
1
   int i = "5";
?

von Malte S. (maltest)


Lesenswert?

Marcel Hoffmann schrieb:
> DWORD byte = "0x0000001";

Von den anderen Dingen mal abgesehen:

Du definierst eine Variable vom Typ DWORD, nennst sie byte und versuchst 
ihr dann, einen String zuzuweisen. Ersteres ist syntaktisch okay, aber 
doch eher verwirrend, gerade wenn man nicht so wirklich weiß, was man 
eigentlich tut. Zweiteres wurde ja schon behandelt.

<nitpick>
Auch wenn dein Code sich der Untermenge von C bedient, die auch legales 
C++ ist und sich insofern abgesehen von den deplazierten 
String-Literalen als C++ compilieren lassen sollte, ist das eigentlich 
C. Ist völlig legitim, aber falls du C++ lernen möchtest, dann benutze 
besser von Anfang an die entsprechenden Casts etc. Dann beschäftigst du 
dich automatisch mehr damit, was die verschiedenen Typen eigentlich sind 
und was du da eigentlich zwischen diesen Typen wie umwandelst und warum. 
- Auch wenn die WinAPI einem auf dem Weg zur sauberen Typisierung jede 
Menge Steine in den Weg legt ;)
</nitpick>

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.