VSCode: Cannot convert argument from const wchar_t to LPCSTR

В прошлый раз я успешно настроил компиляцию проекта C++ в Visual Studio Code. Пример, который рассматривался в той заметке компилировался без ошибок. Но вот пример с MessageBox на WinAPI выдавал ошибку:

int MessageBoxA(HWND,LPCSTR,LPCSTR,UINT)’: cannot convert argument 2 from ‘const wchar_t [22]’ to ‘LPCSTR’

 

Напомню сам пример:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, L"Goodbye, cruel world!", L"Note", MB_OK);
    return 0;
}

Ошибку можно было устранить, если явно указать на то, что проект в кодировке Unicode. Для этого достаточно было дописать в самом верху такую строчку:

#define UNICODE

Но, устранив ошибку, на которую ругался IntelliSense, мы получили ошибки компоновщика:

Start.obj : error LNK2019: unresolved external symbol __imp__MessageBoxW@16 referenced in function _WinMain@16
C:\Users\Denis\source\repos\WinAPI\Sample01\build\Start.exe : fatal error LNK1120: 1 unresolved externals
The terminal process «C:\Windows\System32\cmd.exe /d /c «C:\Program^ Files^ ^(x86^)\Microsoft^ Visual^ Studio\2019\Community\Common7\Tools\VsDevCmd.bat && cl» /Zi /EHsc /Fe: C:\Users\Denis\source\repos\WinAPI\Sample01\build\Start.exe /FoC:\Users\Denis\source\repos\WinAPI\Sample01\build\ /FdC:\Users\Denis\source\repos\WinAPI\Sample01\build\ C:\Users\Denis\source\repos\WinAPI\Sample01\Start.cpp» terminated with exit code: 2.

 

Поскольку мы используем VS Code, а не Visual Studio Community, то нам придётся опять же указывать библиотеку, в которой находится описание функции MessageBox, вручную. Для этого добавим ещё одну строчку кода:

#pragma comment(lib,"user32.lib")

Таким образом полный код работающего с VS Code примера будет следующим:

#define UNICODE
#include <windows.h>
#pragma comment(lib,"user32.lib")

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, L"Goodbye, cruel world!", L"Note", MB_OK);
    return 0;
}

Наконец-то!
VSCode: Cannot convert argument from const wchar_t to LPCSTR



Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments