提问人:backpack 提问时间:3/13/2023 更新时间:3/13/2023 访问量:56
VSCode 环境中发生winmain@16错误
winmain@16 error occurs in vscode environment
问:
我正在使用 msvc 编译器来创建窗口。发生链接错误,但由于我不熟悉 vscode,因此问题难以解决。
#include <windows.h>
#pragma comment(linker, "/entry:wWinMainCRTStartup /subsystem:console")
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PWSTR pCmdLine, int nCmdShow) {
MSG msg;
HWND hwnd;
WNDCLASSW wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.lpszClassName = L"Window";
wc.hInstance = hInstance;
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc.lpszMenuName = NULL;
wc.lpfnWndProc = WndProc;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassW(&wc);
hwnd = CreateWindowW(wc.lpszClassName, L"Window",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 350, 250, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0)) {
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam) {
switch(msg) {
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProcW(hwnd, msg, wParam, lParam);
}
我已经确认在使用 g++ 时编译而不保存时会发生类似的错误,但就我而言,它是 msvc。 对于 msvc,它将在 2019 年通过开发人员 Power shell 使用。
答:
0赞
Michael Chourdakis
3/13/2023
#1
您与控制台 sybsystem 选项链接,但缺少该功能。控制台应用以 .main
main
创建一个函数或与“Windows”子系统链接,以以 .main
WinMain
也许根本不需要。/entry:wWinMainCRTStartup
评论
0赞
backpack
3/13/2023
那么,我应该如何将子系统转换为Windows呢?
0赞
backpack
3/13/2023
在 Visual Studio 环境中,此代码在控制台模式下也能正常工作。我猜这可能是因为我通过编译指示将入口点更改为 winmain。
0赞
IInspectable
3/14/2023
@backpack 设置函数的入口点会绕过 CRT 的启动代码(顺便说一句,这做了很多)。最好永远不要改变这一点。就 -指令而言,不支持提供的任何选项。您需要将该选项显式传递给链接器。构建环境的手册应说明如何设置它。或者,使用 Visual Studio,并获取一个实际上有用的调试器作为奖励。#pragma
/SUBSYSTEM:WINDOWS
评论