wWinmain,Unicode和Mingw

时间:2010-08-26 00:28:31

标签: c++ mingw

我正在学习Windows API,并使用mingw作为我的编译器,Code :: Blocks作为我的IDE。我遇到了使用wWinMain函数的问题。我使用了位于link text的程序。它在VSC ++ 2008 express上编译得很好但是在使用mingw时我得到了“未定义的WinMain @ 16引用”错误。我已经弄清楚问题是什么(我认为)。通过仅使用Winmain替​​换wWinMain,使用LPSTR替换字符串指针PWSTR,它可以完美地编译。我的问题是,我该如何解决这个问题,如果没有,就不会使用Unicode那么大的交易。

感谢。

3 个答案:

答案 0 :(得分:23)

对于旧版本的MinGW,您可以使用包装器:

的mingw-Unicode的主要:

https://github.com/coderforlife/mingw-unicode-main/

  

在MinGW中添加wmain和wWinMain支持的简单包装器

     

这些包装器允许在MinGW中无缝使用wmain / wWinMain   使用Unicode(WCHAR),常规(CHAR)或选择的能力   (TCHAR)。

     

使用它们的说明在文件中。另外看一看   其他使用它们的程序。


对于新版本的MinGW,您应该使用-municode选项,就像在mingw-unicode-main自述文件中所说的那样:

  

注意:由于MinGW现在具有内置功能,因此不应再使用此功能   解。将-municode添加到命令行(可能还有extern“C”   到wmain函数)。

-municode选项适用于MinGW-w64。在2012-07,当我尝试使用MinGW时,它没有-municode选项。

以下是如何安装MinGW-w64:

目标Win32:

目标Win64:


与Unicode相关的问题:

答案 1 :(得分:15)

使用plain(非unicode)WinMain函数,然后使用GetCommandLineW获取unicode命令行。 MinGW不了解wWinMain

你可能会发现在MinGW上工作很困难; last time I used it it did not support most of the wchar_t components of the C++ standard library (i.e. std::wifstream, std::wstring, etc)使得与Unicode Windows位的接口变得困难。

你有什么反对MSVC的吗?

答案 2 :(得分:3)

我知道我应该评论而不是回答,但我没有足够的声誉。

我想补充说我必须在[设置>中更改指向exe文件的链接编译器...>工具链可执行文件> Program Files]以获取要运行的Community版本。

此外,我2016年的CodeBlocks声称它是Unicode,但-municode选项不起作用,只有社区版本的MiniGW更新工作。

如果要再次使用main而不是wmain,则必须删除-municode选项。