c ++ RegSetValueEx устанавливает только одно значение символа в реестре - PullRequest
2 голосов
/ 19 декабря 2010

Я использую данные (char *) и получаю в реестре только одно значение char. если я не использую приведение MSVC 2010 говорит мне, что тип аргумента LPCTSTR несовместим с const char *.

Может ли кто-нибудь мне помочь?

HKEY hKey;
LPCTSTR sk = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");

LONG openRes = RegOpenKeyEx(HKEY_CURRENT_USER, sk, 0, KEY_ALL_ACCESS , &hKey);

if (openRes==ERROR_SUCCESS) {
    printf("Success opening key.");
} else {
    printf("Error opening key.");
}

LPCTSTR value = TEXT("SomeKey");
LPCTSTR data = L"TestData\0";

LONG setRes = RegSetValueEx (hKey, value, 0, REG_SZ, (LPBYTE)data, strlen(data)+1);

if (setRes == ERROR_SUCCESS) {
    printf("Success writing to Registry.");
} else {
    printf("Error writing to Registry.");
}
cout << setRes << endl;

LONG closeOut = RegCloseKey(hKey);
if (closeOut == ERROR_SUCCESS) {
    printf("Success closing key.");
} else {
    printf("Error closing key.");
}

Ответы [ 3 ]

8 голосов
/ 19 декабря 2010

strlen(data), вероятно, возвращает значение 1, так как strlen ожидает символ *, а L"TestData\0" широкий. Используйте TEXT("TestData\0") и звоните _tcslen(data).
Обратите внимание, что RegSetValueEx ожидает размер данных, поэтому используйте _tcslen(data) * sizeof(TCHAR)

1 голос
/ 06 октября 2015

замените L"TestData" на _T("TestData"); и strlen(data)+1 на tcslen(data) * sizeof(TCHAR));

, поэтому ваш код выглядит следующим образом:

LPCTSTR value = TEXT("SomeKey");
LPCTSTR data = TEXT("TestData");

LONG setRes = RegSetValueEx(hKey, value, 0, REG_SZ, (LPBYTE)data, _tcslen(data) * sizeof(TCHAR));
1 голос
/ 19 декабря 2010

Куда вы приводите данные?

В любом случае, похоже, что вы, возможно, работаете с широкими символами, но вы, кажется, используете «обычный старый» strlen - вместо wcslen или какой-либо другой функции, предназначенной для работы с строками широких символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...