На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> MultiByteToWideChar() , Проблена конвертирования в юникод.
    ExpandedWrap disabled
      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 символа. (естественно, квадратными скобками заменены символы-квадраты, они бы не отобразились здесь)
      MultiByteToWideChar(CP_ACP, 0, npath, strlen(npath)+1, nwpath, strlen(npath)+1);

      вот те правильный код, и не спрашивай почему, читай MSDN
        Чем тебя не устраивает :

        mbtowc(nwpath, npath, strlen(npath)+1);

        ?? :(
          Andreyy, ваш код тоже направильный. Последний параметр - размер буффера а не длина строки в 3 аргументе. Ошибка
          dark_warlock состоит в том, что он измеряет размер указателя, который само собой равен 4. Размер nwpath[0] равняется 2, итого он сообщает что в буффере поместится 2 символа. Это мы и видим.

          Правильнее сделать так:
          ExpandedWrap disabled
                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 раза, в первый раз не передав буффер чтобы узнать сколько нужно места, в мсдн это описано
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0216 ]   [ 16 queries used ]   [ Generated: 19.03.24, 11:05 GMT ]