C++ Registry hilfe bei DWORD

OP #3224510
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
Gast #3224545
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?
OP #3224555
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.
#3224565
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";
?
#3224598
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>

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren