Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > изменение реестра, тип REG_SZ


Автор: klepa 8.2.2010, 13:56
Возможно по этой теме сказано уже много, но ответа на свой вопрос я так и не нашла. Нужно изменить параметр реестра с типом REG_SZ
 
Код
 RegSetValueEx(hKey5,      // subkey handle 
           L"NtpServer",  // value name 
           0,                 // must be zero 
           REG_SZ,         // value type 
           (LPBYTE) '192.198.0.33',  // pointer to value data 
           sizeof((DWORD)+1));    // length of value data  

Выдает ошибку error C2015: too many characters in constant 

Автор: artsb 8.2.2010, 14:00
Цитата

For string-based types, such as REG_SZ, the string must be null-terminated. With the REG_MULTI_SZ data type, the string must be terminated with two null characters. A backslash must be preceded by another backslash as an escape character. For example, specify "C:\\mydir\\myfile" to store the string "C:\mydir\myfile".

А если так:
Код

 RegSetValueEx(hKey5,      // subkey handle 
           L"NtpServer",  // value name 
           0,                 // must be zero 
           REG_SZ,         // value type 
           (LPBYTE) "192.198.0.33",  // pointer to value data 
           sizeof((DWORD)+1));    // length of value data  


Добавлено через 1 минуту и 6 секунд
"192.198.0.33" - строка как ни как, а вы её в одинарных кавычках записали.

Автор: klepa 8.2.2010, 19:09
спасибо большое!! надо же, такую глупую ошибку допустила

правда от проблем это не избавила - проблема в кодировке, вместо занесенных данных отображаются просто квадратики ((( подскажите плиз, как исправить

Автор: artsb 8.2.2010, 19:38
Хм... а так не пробовали:
Код

(LPBYTE) L"192.198.0.33"

?

Добавлено через 1 минуту и 37 секунд
Кстати, последний параметр должен быть таким:
Код

strlen("192.198.0.33") + 1


Добавлено через 2 минуты и 58 секунд
Иероглифы и в имени параметра и в самом параметре?

Автор: klepa 9.2.2010, 10:32
иероглифы в самом параметре. 
Код

        (LPBYTE) L"192.198.0.33"


это помогло, но отображается почему-то только 6 символов, т.е. параметр равен 192.19

Автор: artsb 9.2.2010, 10:43
Код

 RegSetValueEx(hKey5,      // subkey handle 
           L"NtpServer",  // value name 
           0,                 // must be zero 
           REG_SZ,         // value type 
           (LPBYTE) L"192.198.0.33",  // pointer to value data 
           wcslen("192.198.0.33") + 2);    // length of value data  

?

Автор: GremlinProg 9.2.2010, 10:50
Код

LPCTSTR lpszData = TEXT("192.198.0.33");
::RegSetValueEx( hKey5, TEXT("NtpServer"), 0, REG_SZ, (LPBYTE)lpszData, ( _tcslen( lpszData ) + 1 ) * sizeof( TCHAR ) );

ну вы даете...

Автор: klepa 9.2.2010, 10:53
Огромное спасибо. Теперь все работает )

Автор: artsb 9.2.2010, 10:59
Цитата(GremlinProg @  9.2.2010,  10:50 Найти цитируемый пост)
ну вы даете... 

Люблю ВСВ 6, поэтому с юникогодом не очень дружу   smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)