将“CLR Console App”项目改为“CLR Form App”
我有一个 'CLR Console App' 项目,在其中添加了一个 'Windows Form' 项。窗体功能正常,但控制台会先出现,然后窗体再显示。我该如何修改项目,使窗体在不先启动命令提示符的情况下显示?我把System:SubSystem修改为Windows而不是Console,但得到 "unresolved external symbol WinMain referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)" 的错误。
使用VS2026。对类似问题的若干回答似乎是针对较早版本的VS,因此在VS2026上不起作用。此前并非问题,因为存在一个C++/CLI Form应用程序的项目模板,但在VS2026中似乎不存在。
解决方案
把你的 int main() 改为 int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE, _In_ LPWSTR lpCmdLine, _In_ int nShowCmd)
简单来说,main() 或 WinMain() 并不是程序中的实际入口点。实际入口点由CRT提供,随后会先执行一些初始化代码,例如构造全局变量,然后再调用你的 main()/WinMain()。
当这个CRT_real_main尝试调用WinMain(因为子系统是Windows,而不是Console),它找不到WinMain的定义。因此,会出现 "unresolved external symbol WinMain referenced" 的错误。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。