Рассматриваю пример кода на WinAPI:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
return 0;
}
Если ничего не изменять, то в Visual Studio Community я получаю такое сообщение об ошибке:
Error (active) E0167 argument of type «const char *» is incompatible with parameter of type «LPCWSTR» Sample01 C:\Users\Denis\source\repos\WinAPI\Sample01\Start.cpp 6
Ладно, исправлю как нужно.
#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;
}
Теперь появляется ошибка при сборке проекта:
LNK2019 unresolved external symbol _main referenced in function «int __cdecl invoke_main(void)» (?invoke_main@@YAHXZ)
Чтобы исправить её, потребовалось изменить конфигурацию:
▶ ▶ ▶ ▶ ▶
Здесь нужно сменить Console (/SUBSYSTEM.CONSOLE) на Windows (/SUBSYSTEM:WINDOWS)
Останется лишь Предупреждение такого типа:
Warning C28251 Inconsistent annotation for ‘WinMain’: this instance has no annotations. See c:\program files (x86)\windows kits\10\include\10.0.19041.0\um\winbase.h(1006). Sample01 C:\Users\Denis\source\repos\WinAPI\Sample01\Start.cpp 3
Его можно игнорировать. Но если вы хотите, чтобы не было даже предупреждений вида SAL Annotations, можно разнести переносы строк (хотя мне так не нравится):
#include <windows.h>
int WINAPI WinMain
(
HINSTANCE _In_ hInstance,
HINSTANCE _In_opt_ hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
)
{
MessageBox(NULL, L"Goodbye, cruel world!", L"Note", MB_OK);
return 0;
}
Отдельно сделаю примечание для компилятора MinGW-w64 — for 32 and 64 bit Windows (C++)
Здесь изначальный код работает, поэтому пришлось оставить его в таком виде:
Здесь изначальный код работает, поэтому пришлось оставить его в таком виде:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
return 0;
}
DenTNT недавно публиковал (посмотреть все)
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024