Хобрук: Ваш путь к мастерству в программировании

MessageBox производит вывод, отличный от Cout C++

Я пытаюсь загрузить имя изображения, используя его адрес виртуальной машины, вызвав GetModuleFileName(), который, кажется, правильно возвращает значение в массив TCHAR[]. Я могу правильно отображать данные, используя MessageBox(), но cout <<, похоже, отображает какое-то странное шестнадцатеричное число.

TCHAR buf[MAX_PATH];
HMODULE hProc = LoadLibrary(TEXT("kernel32.dll"));
GetModuleFileName(hProc, buf, MAX_PATH);
cout << buf; //Produces the odd number
MessageBox(NULL, buf, NULL, MB_OK); //Produces correct filepath
FreeLibrary(hProc);

Должен ли я установить флаг для cout, чтобы он знал, как его правильно напечатать? Благодарю вас!

03.12.2011

  • В современном программировании Windows (начиная с 2000 года) не используйте TCHAR. Используйте, например. wchar_t. Тогда вы лучше знаете, что делаете и с чем имеете дело. 04.12.2011
  • Из любопытства, в чем разница? Совместимость? 04.12.2011
  • TCHAR — это макрос (подстановка чистого текста), который определяется либо как char, либо как wchar_t, в зависимости от того, был ли определен символ UNICODE при включении соответствующего заголовка, обычно <windows.h>. Точно так же TEXT добавляет префикс L или нет. Это означает, что код, который работает с определенным UNICODE, может и, вероятно, не будет компилироваться, когда UNICODE не определен. Схема T изначально поддерживала Windows 9x, но с 2011 года это просто проблемный дополнительный уровень запутывания. Например, это помешало вам узнать, что вы имеете дело с wchar_t. Ура и чт., 04.12.2011

Ответы:


1

Вероятно, вам нужно использовать wcout, потому что ваш TCHAR может быть однокодовым. Или преобразовать его.

03.12.2011
  • Такое ощущение, что это что-то простое. Никогда не знал о wcout до сих пор, спасибо! 04.12.2011
  • Извините, я не видел вашего ответа, когда публиковал свой ... и я не могу его удалить, потому что сегодня я уже удалил 5 своих сообщений .... 04.12.2011
  • Есть ли в Windows tcout или что-то в этом роде, это будет cout для ANSI и wcout для Unicode? 04.12.2011
  • Вместо этого не должно быть TCHAR :) На самом деле, я не знаю, я не использую окна уже целую вечность. Если ничего подобного нет, возможно, вы можете #define. 04.12.2011

  • 2

    Может быть, вам больше повезет с

    std::wcout << buf;
    
    03.12.2011
    Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...