В прошлый раз я успешно настроил компиляцию проекта 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.
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;
}
Наконец-то!
DenTNT недавно публиковал (посмотреть все)
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024