繁体   English   中英

在 C 中运行 WinMain 的问题

[英]Issues running WinMain in C

目前我在 C 中遇到WinMain问题(特别是在 Visual Studio 中)。

例如...

#include <stdio.h> 
#include <Windows.h>

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    PSTR lpCmdLine, INT nCmdShow)
{

    return(0);
}

1>------ Build started: Project: GameB, Configuration: Debug x64 ------
1>LIBCMTD.lib(exe_main.obj) : error LNK2019: unresolved external symbol main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
1>E:\James\VisualStudio\CProjects\GameB\x64\Debug\GameB.exe : fatal error LNK1120: 1 unresolved externals
1>Done building project "GameB.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

只是这个基本设置给了我一个“WinMain 的注释不一致”警告。 两天来我一直在寻找任何帮助,最接近答案的是人们在 C++ 的上下文中谈论 WinMain。 我觉得这是 Visual Studio 的一个问题,因为我最初只是使用 VS Code 并设法让一个应用程序(一个生成弹出窗口的应用程序)编译和运行。

你只是设置你的winmain错误。 这应该有效:

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);

或者

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR lpCmdLine, INT nCmdShow)
{
    return 0;
}

不要忘记 #include <Windows.h> 并将子系统更改为 windows。

您需要在设置中将子系统从Console设置为Windows ,方法是在解决方案资源管理器中右键单击您的项目,选择properties ,然后转到Linker->System并将SubSystem设置为Windows(/SUBSYSTEM:WINDOWS)

要使用WinMain程序入口点,您需要告诉链接器以“Windows”子系统为目标,而不是构建控制台应用程序。 否则,链接器将寻找(但找不到)C 程序的标准main入口点。

在解决方案资源管理器中,右键单击您的项目并选择“属性”。 然后导航到“Linker -> System”页面并选择“Windows (/SUBSYSTEM:WINDOWS)”作为目标:

在此处输入图像描述

在您的“注释不一致”警告中,请参阅此 Q/A: “WinMain”的注释不一致


此外,正如SNO 的回答中所述,您应该将WINAPI属性添加到您的WinMain函数中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM