Невозможно преобразовать параметр из ‘const char ‘ в ‘LPCWSTR’

При компиляции этого кода:

#include  int WINAPI WinMain(HINSTANCE hInsance,HINSTANCE hPrevInstance,PSTR cmdLine,int showCmd){ MessageBox(0,"First Win32 Program","Window Tittle",MB_OK); } 

Я получаю ошибку компилятора:

Ошибка C2664: «MessageBoxW»: невозможно преобразовать параметр 2 из ‘const char [20]’ в ‘LPCWSTR’ 1> Указанные типы не связаны; для преобразования требуется reinterpret_cast, литье в стиле C или функция-стиль

Что я делаю не так?

У вас определен UNICODE , поэтому MessageBox ожидает широкую строку.

По умолчанию UNICODE определяется в Visual Studio 2010. Либо вызовите MessageBoxA не используйте MessageBox определите или передайте широкий строковый литерал ( L «Первая программа Win32» и «Название windows L ») или, если вы действительно заботитесь о возможности создания без определения UNICODE , используйте макрос _T вокруг ваших строковых литералов: _T («Первая программа Win32») (это то же самое, что L «Первая программа Win32», когда определен UNICODE, но это будет «Первая программа Win32», когда UNICODE не определен).

Дополнительные сведения об UNICODE и о том, как это влияет на вызовы API, см. По этой ссылке: http://msdn.microsoft.com/en-us/goglobal/bb688113.aspx . В частности, разделы ниже «Создание приложений Unicode Win32».

С другой стороны: все операционные системы Windows, поддерживаемые Microsoft сегодня, являются родными Unicode. Я бы рекомендовал всегда поддерживать «широкий» API. В этом случае MessageBoxW – это то, что определяется MessageBox когда установлен UNICODE . Дни использования макроса _T и компиляции без определения UNICODE должны быть позади.

MessageboxW ожидает широкого символа … вы можете внести небольшие изменения в свой код, и ваш код будет отлично работать. Решение первое: – MessageBox (0, L «Первая программа Win32», L «Window Tilt», MB_OK); Решение два. Используйте MessageboxA вместо Messagebox. MessageboxA примет символ в наборе символов ANCI.

  • Как получить список доступных последовательных портов в Win32?
  • malloc () против HeapAlloc ()
  • Непосредственная отправка нажатий клавиш в другой процесс путем подключения
  • Можно ли называть pthread_exit из main?
  • Как программно получить версию DLL или EXE-файла?
  • Получить активный цвет автоматической цветовой темы Windows 8
  • Эквивалент ShellExecute в .NET.
  • Как выйти из вызова recv () блокировки?
  • Возможно ли «декомпилировать» Windows .exe? Или, по крайней мере, рассмотреть Ассамблею?
  • Глобальная горячая клавиша в консольном приложении
  • Windows threading: _beginthread vs _beginthreadex vs CreateThread C ++
  • Давайте будем гением компьютера.