Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.237.245.80] |
|
Сообщ.
#1
,
|
|
|
void CDXUTDialog::InitDefaultElements(const char* path) { char npath[60]; LPWSTR nwpath = (LPWSTR)malloc(60*sizeof(WCHAR)); sprintf(npath, "%s%s", path, "\\DXUTControls.dds"; MultiByteToWideChar(CP_ACP, 0, npath, strlen(npath)+1, nwpath, sizeof(nwpath)/sizeof(nwpath[0])); SetTexture( 0, nwpath ); npath == UI\DXUTControls.dds После MultiByteToWideChar nwpath == UI[][][][][][][][][][][][][][][][][][]..[]& то есть нормально конвертируются только первые 2 символа. (естественно, квадратными скобками заменены символы-квадраты, они бы не отобразились здесь) |
Сообщ.
#2
,
|
|
|
MultiByteToWideChar(CP_ACP, 0, npath, strlen(npath)+1, nwpath, strlen(npath)+1);
вот те правильный код, и не спрашивай почему, читай MSDN |
Сообщ.
#3
,
|
|
|
Чем тебя не устраивает :
mbtowc(nwpath, npath, strlen(npath)+1); ?? |
Сообщ.
#4
,
|
|
|
Andreyy, ваш код тоже направильный. Последний параметр - размер буффера а не длина строки в 3 аргументе. Ошибка
dark_warlock состоит в том, что он измеряет размер указателя, который само собой равен 4. Размер nwpath[0] равняется 2, итого он сообщает что в буффере поместится 2 символа. Это мы и видим. Правильнее сделать так: const int BuffSize = 60; char npath[BuffSize]; LPWSTR nwpath = (LPWSTR)malloc(BuffSize*sizeof(WCHAR)); sprintf(npath, "%s%s", path, "\\DXUTControls.dds"; MultiByteToWideChar(CP_ACP, 0, npath, strlen(npath)+1, nwpath, BuffSize); SetTexture( 0, nwpath ); Еще правильнее - это вызвать MultiByteToWideChar 2 раза, в первый раз не передав буффер чтобы узнать сколько нужно места, в мсдн это описано |