使用 Visual Studio 中的模板创建解决方案与空项目相比有何实际作用?

What does creating a Solution using a template in Visual Studio actually do versus an empty project?

我正在关注 Molly Rocket 的 C 入门教程,但在使用“空项目”选项时 运行在 VisualStudio 2019 的调试器中使用以下代码时遇到了一个问题。运行 =12=]

我正在使用空项目选项而不是加载模板,因为这是 Molly 使用的,而我可以只加载一个模板和 运行 那里的代码我想知道为什么我得到这个错误让我可以更好地理解 Visual Studio 和 C++。

#include <Windows.h>

void learnC(void) {

    OutputDebugStringA("Test\n");

}

int CALLBACK WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow) 
{
    learnC();
}

收到错误 LNK2019,这根本没有帮助,因为它只是一个通用的捕获所有错误代码。

error LNK2019: 未解析的外部符号 main 在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)[=31= 中引用]

我已尝试更新 VS2019 的兼容性设置以及人们建议使用的其他设置,但错误仍然存​​在。

同样,当我创建解决方案时,我使用了空白文档而不是模板,因为 Molly Rocket 在编写此代码时使用的是模板。

当我使用模板(我使用 Windows 桌面应用程序模板)并删除所有代码并粘贴我在原始文档中的内容时,我没有收到错误,我想想知道为什么。

感谢您的宝贵时间!

创建空项目时,SubSystem 的值默认为 Console

根据 Doc

An application that uses /SUBSYSTEM:CONSOLE; calls main (or wmain)

An application that uses /SUBSYSTEM:WINDOWS; calls WinMain (or wWinMain), which must be defined to use __stdcall

据我所知,您应该将 SubSystem 设置为 windows(Properties -> Linker -> System -> SubSystem)

更多关于/SUBSYSTEM (Specify Subsystem)的内容,建议您参考link:https://docs.microsoft.com/en-us/cpp/build/reference/subsystem-specify-subsystem?view=vs-2019