Char übergabe funktioniert nicht.



  • //Damit rufe ich die funktion auf
    RegisterApplication(strcat(cPath,"\\test.exe"));
    
    //und das ist meine funktion
    void RegisterApplication(char cPath)
    {
    	HKEY hKey;
    	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0,KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
    	{
    		if(RegSetValueEx(hKey, "test", 0, REG_SZ, (unsigned char*)&cPath, sizeof(cPath)) == ERROR_SUCCESS)
    		{
    			RegCloseKey(hKey);
    		}
    	}
    }
    

    Was muß ich bei der funktion korrigieren, damit ich das so aufrufen kann?
    Bis jetzt kommt der Fehler: error C2664: 'RegisterApplication' : cannot convert parameter 1 from 'char *' to 'char'

    Setze ich ein Sternchen vor strcat, so wird lediglich bloß der erste Buchstabe in dem vector übergeben (- eigentlich logisch)



  • Hallo,

    Dein Methode muss auch eine char-zeiger erwarten.

    void RegisterApplication(char *cPath){
    //rest bleibt
    }
    


  • Ok, das funktioniert. Ich gebe den Char-vec noch mal in einer msgbox aus, dort steht er richtig. ABER in der registry steht da nicht der Pfad, sonder nur 3 kryptische zeichen, die nicht mal annähernd in cPath vorkommen.



  • Hallo,

    du darfst nicht die Adresse eines Zeigers (&cPath) in RegSetValueEx übergeben, sondern mußt den Zeiger selbst (cPath) übergeben. Außerdem mußt du die Länge von cPath noch bestimmen, da diese Information verloren geht, wenn ein Zeiger übergeben wird:

    void RegisterApplication(char* cPath)
    {
        HKEY hKey;
        if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0,KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
        {
            if(RegSetValueEx(hKey, "test", 0, REG_SZ, (BYTE*)cPath, strlen(cPath) + 1) == ERROR_SUCCESS)
            {
                RegCloseKey(hKey);
            }
        }
    }
    

    MfG



  • Jup, so ähnlich hatte ich es gestern auch gelöst. Bloß eben statt (BYTE*) (LPBYTE) - so stand es in dem Beispiel von der MSDN.


Anmelden zum Antworten