RegSetValueEx geht nicht....



  • zu den header Dateien hinzugefügt...
    #include "string.h"

    mein Knopf...
    BYTE cString[]="Hallo";
    RegSetValueEx(HKEY_CURRENT_USER,"test",0,REG_SZ,cString,strlen(cString)+1);

    der Compiler...
    error C2664: 'strlen' : cannot convert parameter 1 from 'BYTE [6]' to 'const char *'

    was mache ich falsch?



  • 1. Bitte cpp-Tags benutzen zur besseren Lesbarkeit. 🙂

    2. <string> statt <string.h> inkludieren

    3. Caste einfach nach char*.



  • ok,thx
    hmmm
    1.kein Problem
    2.ok,was ist der unterschied?
    3.verstehe ich nicht



  • 2. <string> ist ein C++-Header, <string.h> noch der alte C-Header...

    (char*)cString
    

    EDIT: Wie lange dauert es wohl, bis jemand anmeckert, dass ich hier C++-Header anpreise und im gleichen Atemzug C-Casts verwende? Wo bleiben die Puristen? 😉 😃



  • thx

    BYTE cString[]="Hallo, das ist der eigentliche Wert, der unter dem Namen EintragsName gespeicehrt wird";
    RegSetValueEx(HKEY_CURRENT_USER,"Test",0,REG_SZ,cString,strlen((char*)cString)+1);
    

    ich hoffe ich habe den code richtig angebracht 🙂
    Der Compiler hat keinen Fehler gebracht.

    nach dem Anklicken, passiert nichts 😞
    Mein Knopf für Verzeichnisse erstellen im registry funkt.



  • Was kommt denn bei dem Aufruf raus? Check mal den Rückgabewert von RegSetValueEx (steht auch in der Doku).


  • Mod

    _matze schrieb:

    (char*)cString
    

    EDIT: Wie lange dauert es wohl, bis jemand anmeckert, dass ich hier C++-Header anpreise und im gleichen Atemzug C-Casts verwende? Wo bleiben die Puristen? 😉 😃

    Da muss man kein Purist sein um zu sehen, dass dieser cast nichtsd bringt. cString hat keinen implizite Konverteierung nach char*...
    Das ist ein Katastrophen cast!


  • Mod

    tomycat2009 schrieb:

    zu den header Dateien hinzugefügt...
    #include "string.h"

    mein Knopf...
    BYTE cString[]="Hallo";
    RegSetValueEx(HKEY_CURRENT_USER,"test",0,REG_SZ,cString,strlen(cString)+1);

    der Compiler...
    error C2664: 'strlen' : cannot convert parameter 1 from 'BYTE [6]' to 'const char *'

    was mache ich falsch?

    1. BYTE* ist eben nicht char* für strlen.
    2. also mach einen char[] draus und caste.

    char cString[]="Hallo";
    RegSetValueEx(HKEY_CURRENT_USER,"test",0,REG_SZ,reinterpret_cast<BYTE*>(cString),strlen(cString)+1);
    


  • Ich habe mich auf den Compilerfehler, also auf den falschen Parameter von strlen bezogen. Und da funktioniert mein Cast selbstverständlich und bringt das gewünschte Ergebnis! Ob es nicht sinnvoll ist, den String sowieso als char* zu deklarieren, ist eine andere Frage.



  • sorry, ich blicks jetzt garnicht mehr.
    wieso Byte?
    und warum brauche ich strlen?



  • tomycat2009 schrieb:

    sorry, ich blicks jetzt garnicht mehr.
    wieso Byte?
    und warum brauche ich strlen?

    😕

    Sieh dir doch deinen eigenen, ersten Post an! Du hast das doch selbst verwendet...


Anmelden zum Antworten