Registry - Fehler beim Compilieren
-
Ich habe folgendes Programm geschrieben:
#include <iostream.h> #include <windows.h> #include <string> using namespace std; void main() { HKEY hKey; RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\test1", &hKey); RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\test1\\test2", &hKey); BYTE cString[]="Test1"; RegSetValueEx(hKey,"Text1",0,REG_SZ,cString,strlen(cString)+1); RegCloseKey(hKey); }
Und erhalte folgenden Fehler:
error C2664: 'strlen' : Konvertierung des Parameters 1 von 'unsigned char [6]' in 'const char *' nicht moeglich
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder FunktionsformatIch habe schon in die FAQ geschaut und es auch von da rausgeholt, nur diesen Fehler scheint bisher noch keiner gehapt zu haben.
Außerdem, wenn ich
RegCreateKeyEx(HKEY_CURRENT_USER,"Test",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hkey,0);
nehmen, sagt er
RegCreateKeyExA akzeptiert keine 9 Parameter
Warum nicht?MfG ViperT
-
Also bei mir läuft das ohne Warnung und ohne Fehler durch!
-
Hast du vielleicht noch ne Header Datei included, oder genauso übernommen wie ich es da stehen habe, so funktioniert das bei mir nicht
Benutze M$ Visual C++ 6.......MfG ViperT
-
Du kommst mit den Typen durcheinander: Die Funktion strlen erwartet einen char*, Du übergibst aber einen BYTE*. Das ist was anderes, jedenfalls für den Compiler (und das ist auch gut so!). Helfen kann Dir ein cast:
RegSetValueEx(hKey,"Text1",0,REG_SZ,cString,strlen((char*)cString)+1);
Ich halte es aber für besser, mit den zu verabeitenden Typen direkt zu arbeiten. Das macht es für Dich einfacher zu lesen. Einen Cast brauchst Du dann aber auch hier, für RegSetValueEx:
char cString[]="Test1"; RegSetValueEx(hKey,"Text1",0,REG_SZ,(BYTE*)cString,strlen(cString)+1);
-
Jetzt murt der Compiler nicht mehr, thx.
MfG ViperT