Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как записать в реестр сиволы из кодировки юникоде? / 18 сообщений из 18, страница 1 из 1
23.12.2005, 14:47
    #33454605
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
Нужно в мою ветку реестра внести символы из кодировки
юникоде (16-ричные коды которых 0x00E0, 0x00E1).
Когда же я вношу такие значения, то в реестре они
естественно пишутся как 0x00E0 и 0x00E1, но из ASCII.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRegistry *Reg = new TRegistry;
 int buf[ 2 ] = {0x00E0, 0x00E1}; 

 Reg->OpenKey("\\Software\\My Projects",true);
 Reg->WriteString("Тема","Мои приложения");
 Reg->OpenKey("\\Software\\My Projects\\Test",true);
 Reg->WriteString("Приложение","TRegistry");

 Reg->WriteString("Файл",ParamStr( 0 ));
 Reg->WriteBinaryData("BinaryData",&buf,sizeof(buf));

 delete Reg; 

Дак как сделать символы именно из нужной кодировки?
...
Рейтинг: 0 / 0
23.12.2005, 15:17
    #33454714
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  const wchar_t* wc = L"àá";

  RegSetValueExW(
     HKEY_CURRENT_USER
   , L"TestValue"
   ,  0 
   , REG_SZ
   , (unsigned char*)wc
   ,  2 *wcslen(wc)
  );
...
Рейтинг: 0 / 0
23.12.2005, 17:11
    #33455074
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
Не работает. Чего-то не хватает. В какую ветку эту записывется?

Если использовать код
Код: plaintext
1.
2.
3.
...
const wchar_t* wc = L"àá";
Reg->WriteBinaryData("BinaryData",(unsigned char*)wc, 2 *wcslen(wc));
...

то в реестр пишутся ANSII cbvdjks
...
Рейтинг: 0 / 0
26.12.2005, 10:53
    #33456881
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
Еще предложения
...
Рейтинг: 0 / 0
28.12.2005, 09:06
    #33460929
Borya7
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
ось какая?
если потребительская, то она не поддерживает юникод.
...
Рейтинг: 0 / 0
28.12.2005, 10:38
    #33461174
_Балтика
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
MSDN
Код: plaintext
1.
2.
3.
4.
5.
6.
RegSetValueEx(hk,              // subkey handle 
           "EventMessageFile",        // value name 
            0 ,                         // must be zero 
           REG_EXPAND_SZ,             // value type 
           (LPBYTE) pszMsgDLL,        // pointer to value data 
           (DWORD) lstrlen(pszMsgDLL)+ 1 )) // length of value data 
REG_EXPAND_SZ Null-terminated string that contains unexpanded references to environment variables (for example, "%PATH%"). It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions. To expand the environment variable references, use the ExpandEnvironmentStrings function.
...
Рейтинг: 0 / 0
28.12.2005, 11:00
    #33461239
_Балтика
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
_Балтика MSDN
Код: plaintext
1.
2.
3.
4.
5.
6.
RegSetValueEx(hk,              // subkey handle 
           "EventMessageFile",        // value name 
            0 ,                         // must be zero 
           REG_EXPAND_SZ,             // value type 
           (LPBYTE) pszMsgDLL,        // pointer to value data 
           (DWORD) lstrlen(pszMsgDLL)+ 1 )) // length of value data 
REG_EXPAND_SZ Null-terminated string that contains unexpanded references to environment variables (for example, "%PATH%"). It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions. To expand the environment variable references, use the ExpandEnvironmentStrings function.

Извиняюсь, автоматом скопировал.:) Естественно нужно использовать
MSDNREG_SZ Null-terminated string. It will be a Unicode or ANSI string, depending on whether you use the Unicode or ANSI functions
...
Рейтинг: 0 / 0
28.12.2005, 14:11
    #33461978
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
Что-то не верится, что я смогу через "это" записать символы из юникоде...
...
Рейтинг: 0 / 0
28.12.2005, 14:24
    #33462030
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
SCORPION ZЧто-то не верится, что я смогу через "это" записать символы из юникоде...

Для уверенности добавь букву W

RegSetValueEx W

Работающий пример я уже приводил
...
Рейтинг: 0 / 0
28.12.2005, 14:39
    #33462094
_Балтика
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
ZrenBy SCORPION ZЧто-то не верится, что я смогу через "это" записать символы из юникоде...

Для уверенности добавь букву W

RegSetValueEx W

Работающий пример я уже приводил
Ну да, примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
HKEY hkResult = NULL;
DWORD dwDisposition, dwCBdata;
wchar_t keyName[ 256 ];
wchar_t data[] = L"???????????????????????";
wcscpy(keyName, L"SOFTWARE\\MyKeyName");
		
LONG h = RegCreateKeyExW(HKEY_LOCAL_MACHINE, keyName,  0 , NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hkResult, &dwDisposition);
if (h == ERROR_SUCCESS)
{
    ::RegSetValueEx(hkResult, L"MyValue",  0 , REG_SZ, (BYTE*)&data, (wcslen(data) +  1 ) + sizeof(wchar_t));
    if (hkResult)
    	::RegCloseKey(hkResult);
}
...
Рейтинг: 0 / 0
29.12.2005, 14:17
    #33464370
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
В строке
Код: plaintext
::RegSetValueEx(hkResult, L"BinaryData",  0 , REG_SZ, (BYTE*)&data, (wcslen(data) +  1 ) + sizeof(wchar_t));

получаю ошибки
[C++ Error] Unit1.cpp(101): E2034 Cannot convert 'wchar_t *' to 'const char *'
[C++ Error] Unit1.cpp(101): E2342 Type mismatch in parameter 'lpValueName' (wanted 'const char *', got 'wchar_t *')
...
Рейтинг: 0 / 0
29.12.2005, 14:39
    #33464450
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
RegSetValueEx W
...
Рейтинг: 0 / 0
29.12.2005, 14:57
    #33464509
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
Да теперь не ругается, но и реестре ничего не пишет!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
HKEY hkResult = NULL;
DWORD dwDisposition, dwCBdata;
wchar_t keyName[ 256 ];
//const wchar_t* data = L"àá";
wchar_t data[] = L"àá";

wcscpy(keyName, L"\\Software\\My Projects\\Test");

LONG h = RegCreateKeyExW(HKEY_LOCAL_MACHINE, keyName,  0 , NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hkResult, &dwDisposition);
if (h == ERROR_SUCCESS)
{
    ::RegSetValueExW(hkResult, L"BinaryData",   0 , REG_SZ, (BYTE*)&data, (wcslen(data) +  1 ) + sizeof(wchar_t));
    if (hkResult)
    	::RegCloseKey(hkResult);
} 
...
Рейтинг: 0 / 0
29.12.2005, 15:09
    #33464551
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
SCORPION Z
::RegSetValueExW(hkResult, L"BinaryData", 0, REG_SZ, (BYTE*)&data, (wcslen(data) + 1) + sizeof(wchar_t));
}

Без &
Код: plaintext
1.
::RegSetValueExW(hkResult, L"BinaryData",   0 , REG_SZ, (BYTE*)data, 

И насчет
Код: plaintext
(wcslen(data) +  1 ) + sizeof(wchar_t))
Надо
Код: plaintext
(wcslen(data) +  1 ) * sizeof(wchar_t)
...
Рейтинг: 0 / 0
29.12.2005, 15:24
    #33464600
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
НЕ СОЗДАЕТ КЛЮЧ В РЕЕСТРЕ И ПРИ ЭТИХ ИЗМЕНЕНИЯХ.
...
Рейтинг: 0 / 0
29.12.2005, 15:54
    #33464680
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
SCORPION Z

wcscpy(keyName, L"\\Software\\My Projects\\Test");

}

Эта ... \\ выкинь.

Код: plaintext
1.
wcscpy(keyName, L"Software\\My Projects\\Test");
...
Рейтинг: 0 / 0
29.12.2005, 16:26
    #33464773
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
Хоть и выкинь, а результат = НЕТ ЗАПИСИ В РЕЕСТРЕ
...
Рейтинг: 0 / 0
29.12.2005, 16:30
    #33464785
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать в реестр сиволы из кодировки юникоде?
Очевидно не срабатывает RegCreateKeyExW
Потому как не создается не просто ключ, а ветка реестра!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как записать в реестр сиволы из кодировки юникоде? / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]