首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinMain与wWinMain的区别

WinMain与wWinMain的区别
EN

Stack Overflow用户
提问于 2009-11-25 03:12:52
回答 3查看 21.9K关注 0票数 27

唯一的区别是Winmain使用char*作为lpCmdLine参数,而wWinMain使用wchar_t*。

在Windows XP上,如果应用程序条目是WinMain,Windows是否会将命令行从Unicode转换为Ansi并传递给应用程序?

如果命令行参数必须是Unicode (例如,Unicode文件名,转换会导致某些字符丢失),这是否意味着我必须使用wWinMain作为入口函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-25 03:22:01

在Windows XP上,如果应用程序条目是WinMain,Windows是否会将命令行从Unicode转换为Ansi并传递给应用程序?

是。

如果命令行参数必须是Unicode (例如,Unicode文件名,转换会导致某些字符丢失),这是否意味着我必须使用wWinMain作为入口函数?

是的,如果您想要正确地处理程序的Unicode参数,您应该这样做。

WinMain() on MSDN的文档也同意这一点。

但是,您也可以使用GetCommandLineW来检索命令行,特别是使用Unicode。

票数 21
EN

Stack Overflow用户

发布于 2017-10-04 00:03:15

WinMain/wWinMain不是真正的Windows入口点。Windows只调用PE头中指定的函数,不带任何参数。

当使用微软的工具链时,这是你创建图形用户界面应用程序时的void WinMainCRTStartup() { ... },除非你链接到/Zl,否则它会为你提供。

Visual C++创建的默认WinMainCRTStartup代码初始化C运行时库,调用全局构造函数(如果有),然后使用来自GetModuleHandle(NULL)HINSTANCE、来自GetCommandLineA/W()的命令行(跳过命令行中的文件名)和来自GetStartupInfo的show命令调用WinMain/wWinMain函数。

WinMainwWinMain之间的惟一区别是命令行字符串,您应该在Unicode应用程序中使用wWinMain (并且现在创建的所有应用程序都应该使用Unicode)。当然,您可以手动调用WinMain中的GetCommandLineW()并自己解析它,如果您真的愿意的话。

在Windows NT/2000/XP和更高版本中,命令行在内部是Unicode字符串,而WinMain/GetCommandLineA()提供的是它的转换版本,它可能不能正确地表示每个字符。在Windows95/98/ME上,情况正好相反,但GetCommandLineW()总是能够转换GetCommandLineA()中的每个字符。

票数 8
EN

Stack Overflow用户

发布于 2009-11-25 03:22:44

Windows XP及以上版本默认为unicode!因此,不需要转换。C++运行时加载程序负责传递给应用程序的参数。标准的Win32应用编程接口规定主条目为WinMain(...)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1792275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档