?
kernel64 schrieb:
Hallo, ich habe folgenden Code welcher ein Eintrag in die Registry reinschreibt, jetzt möchte ich noch paar Überprüfungen einbauen wie Schreib- & Leserechte, also nix besonderes nur zum testen ob Keys gelesen oder gespeichert werden können:
void AddValue(HKEY KEY, string path, string name, string inhalt)
{
HKEY key;
DWORD dwType;
DWORD dwSize=300;
char szString[300];
RegOpenKeyEx(KEY, path.c_str(),0, KEY_ALL_ACCESS, &key);
RegQueryValueEx(key, name.c_str(), NULL, &dwType, (BYTE *)szString, &dwSize);
//Inhalt wird zwischengespeichert
string TMP = szString;
TMP += inhalt;
//Neuer Wert wird gespeichert
RegSetValueEx(key, name.c_str(), 0, REG_SZ, (unsigned char *)TMP.c_str(), TMP.length());
RegCloseKey(key);
}
Also könnt ihr mir bitte nur die Zeilen verändern...THX
Nö, keinen Bock
Benenn bitte die Variablen konsistent - entweder Ungarische Notation oder nicht, vermeide solche Namen wie "TMP" und "KEY" statt z.B. "strBuf" und "hKey" und rücke bitte gemäß Konvention ein ( 4 statt 8 ).
Und welch ein String das ist wüsste ich auch gerne - std::string?
Wenn Du das alles verbessert poste ich auch den kompletten Block.
Versprochen!
So in etwa geht's :
//Forward Deklarations
HRESULT AllocSomething1(void*);
HRESULT AllocSomething2(void*);
HRESULT FreeSomething1(void*);
HRESULT FreeSomething2(void*);
/*
* [...]
*/
HRESULT MyFunction3()
{
HRESULT hr = ERROR_SUCCESS;
void* lpvOne;
void* lpvTwo;
if(SUCCEDED(hr = AllocSomething1(lpvOne)))
{
if(SUCCEDED(hr = AllocSomething2(lpvTwo)))
{
// [...]
hr = FreeSomething2(lpvTwo);
}
hr = FreeSomething1(lpvOne);
}
if(!SUCCEEDED(hr))
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
hr,//GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL);
// Display the string.
// MessageBox( NULL, lpMsgBuf, "GetLastError",
// MB_OK|MB_ICONINFORMATION );
std::cerr << (TCHAR*)lpMsgBuf << std::endl;
// Free the buffer.
LocalFree( lpMsgBuf );
}
return hr;
}
Grüsse
Gast
P.S.: Warum nicht UNICODE auf einem UNICODE-System?
Auch eine Fall von Barrierefreiheit und einfach mittels TCHAR zu implementieren - dann wärs std::wstring oder ein eigener typedef, der hier aber offenbar nicht vorliegt da Du hart auf unsigned char* "castest".