Registry

Hallo!

Versuche Werte in die Registry zu schreiben, aber da stimmt was mit den Typen nicht. Kann mir jemand helfen, ich probiere da jetzt schon 2 Stunden herum.
bin für jede hilfe sehr dankbar.

void setRegistryKey(CString strPath)
{
HKEY hKey = HKEY_CURRENT_USER;

BYTE cString[]=strPath;
RegCreateKeyEx(HKEY_CURRENT_USER,„Software\Ados\ChequeLoader“,0,NULL,REG_OPTION_NON_VOLATILE,KEY_QUERY_VALUE,NULL,&hKey,NULL);
RegSetValueEx(hKey,„path“,0,REG_SZ,cString,strlen(cString)+1);
/*
DWORD dwData = 256;
BYTE cDaten[256] = „“;
RegQueryValueEx(hKey,„EintragsName“,0,0,cDaten,&dwData2);
*/

RegCloseKey(hKey);
}

Hallo Andrea!

da stimmt was mit den Typen nicht.

Könntest du das _etwas_ näher spezifizieren (ohne mir den Sourcecode angesehen zu haben…)?

Gruß
Martin

Hallo!

In der MSDN steht:

If the function succeeds, the return value is ERROR_SUCCESS.

If the function fails, the return value is a nonzero error code defined in Winerror.h. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error.

Du prüft aber nirgends den returnvalue , so etwas tut man nicht.

Weiters fällt mir auf dass du beim öffnen KEY_QUERY_VALUE angibst, um zu schreiben musst du aber KEY_SET_VALUE angeben.
In der MSDN steht:

The key identified by the hKey parameter must have been opened with KEY_SET_VALUE access.

Gruß Pauli!

Hallo!

Tut mir leid, dass ich so ungenau formuliert habe.
Ich kann das Programm so nicht kompilieren, ich bekomme 2 Fehlermeldungen:

  1. Cannot convert from CString to Byte[]
  2. Cannot convert parameter 1 from Byte[] to const char *;

und ich weiß einfach nicht, wie ich die Typen umändern kann.
Ich will ja einfach nur einen CString in die Registry schreiben und wieder auslesen. Bitte kann mir jemand helfen, ich bin schon so verzweifelt.

Grüße,
Andrea

da stimmt was mit den Typen nicht.

Könntest du das _etwas_ näher spezifizieren (ohne mir den
Sourcecode angesehen zu haben…)?

Gruß
Martin

Hallo Andrea,

der Key muss zum Schreiben geöffnet werden:

RegCreateKeyEx(HKEY_CURRENT_USER,„Software\Ados\ChequeLoader“,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,NULL);

oder:

RegCreateKeyEx(HKEY_CURRENT_USER,„Software\Ados\ChequeLoader“,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);

Ein CString kann hier nicht direkt übergeben werden, Du must den Bufferinhalt übergeben:

RegSetValueEx(hKey,„path“,0,REG_SZ,(const unsigned char *)cString.GetBuffer(cString.GetLength()), cString.GetLength());

So sollte es gehen.
Die Rückgabewerte der Funktionen auszuwerten ist immer sinnvoll.

Gruß
Christiane