String in die Registry schreiben



  • Hallo zusammen,

    ich möchte einen String in die Registry schreiben. Leider klappt das nicht.
    Ich vermute das liegt daran das ich ein char Array an die Funktion RegSetValueEx übergebe, diese aber einen Unicode string schreibt.

    Wie muss ich das Array übergeben?

    Es soll "hallo" in die Registry geschrieben werden. Es steht aber nach ausführen des Programms nur "??o" drin.

    hier ist der Code

    int WINAPI WinMain(	HINSTANCE hInstance,
    					HINSTANCE hPrevInstance,
    					LPTSTR    lpCmdLine,
    					int       nCmdShow)
    {
     	// TODO: Place code here.
    
    HKEY hkMyKey;
    DWORD dwDisposition;
    unsigned char string[]="hallo";
    
    	if (ERROR_SUCCESS!=RegCreateKeyEx(	HKEY_USERS,
    										TEXT("TEST"),
    										0,
    										NULL,
    										REG_OPTION_NON_VOLATILE,
    										0,
    										NULL,
    										&hkMyKey,
    										&dwDisposition
    										))
    		printf("Fehler beim Erzeugen des KEYS");
    
    	if (ERROR_SUCCESS!=RegSetValueEx(	hkMyKey,
    										TEXT("String"),
    										0,
    										REG_SZ,
    										string,
    										(sizeof(string))
    										))
    
    		printf("Fehler beim schreiben");
    
    	if (ERROR_SUCCESS!=RegCloseKey(	hkMyKey))
    	printf("Fehler beim schließen");
    
    	return 0;
    }
    

    Gruß
    spacehelix



  • RegSetValueEx erwartet einen (const) byte pointer, daher musst du den char pointer casten:

    reinterpret_cast<byte*>(string)
    

    // edit
    Sehe grade, dass du schon ein byte array hast, daher dürfte es eigentlich keine Probleme bereiten, wenn du kein Unicode aktiviert hast.
    Andernfalls hilft folgender code:

    TCHAR string[]=TEXT("hallo"); // <-- TCHAR anstatt unsigned char
    
    	if (ERROR_SUCCESS!=RegCreateKeyEx(    HKEY_CURRENT_USER,
    		TEXT("TEST"),
    		0,
    		NULL,
    		REG_OPTION_NON_VOLATILE,
    		KEY_ALL_ACCESS,
    		NULL,
    		&hkMyKey,
    		&dwDisposition
    		))
    		printf("Fehler beim Erzeugen des KEYS");
    
    	if (ERROR_SUCCESS!=RegSetValueEx(    hkMyKey,
    		TEXT("String"),
    		0,
    		REG_SZ,
    		reinterpret_cast<byte*>(string), // <-- cast
    		(sizeof(string))
    		))
    

  • Mod

    qasdfgh schrieb:

    RegSetValueEx erwartet einen (const) byte pointer, daher musst du den char pointer casten:

    reinterpret_cast<byte*>(string)
    

    Das ist nicht korrekt. Das hat mit const nichts zu tun.

    In jedem Fall muss der char * erst einmal in enen UNICODE String umgewandelt werden, oder man verwendet direkt RegSetValueExA!



  • danke für eure hilfe,

    ich habs damit geschafft.

    Gruß
    spacehelix


Anmelden zum Antworten