我正在学习Windows API,并使用mingw作为我的编译器,Code :: Blocks作为我的IDE。我遇到了使用wWinMain函数的问题。我使用了位于link text的程序。它在VSC ++ 2008 express上编译得很好但是在使用mingw时我得到了“未定义的WinMain @ 16引用”错误。我已经弄清楚问题是什么(我认为)。通过仅使用Winmain替换wWinMain,使用LPSTR替换字符串指针PWSTR,它可以完美地编译。我的问题是,我该如何解决这个问题,如果没有,就不会使用Unicode那么大的交易。
感谢。
答案 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:
主页>针对Win32的工具链>个人构建> rubenvb> GCC-4.7释放:
在Windows上,您需要“i686-w64-mingw32-gcc-4.7.2-release- win32 _rubenvb.7z”。
将文件夹解压缩到驱动器的根目录。
将“mingw32”文件夹重命名为“MinGW-32”。
目标Win64:
主页>针对Win64的工具链>个人构建> rubenvb> GCC-4.7释放:
在Windows上,您需要“x86_64-w64-mingw32-gcc-4.7.2-release- win32 _rubenvb.7z”。
将文件夹解压缩到驱动器的根目录。
将“mingw64”文件夹重命名为“MinGW-64”。
与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选项。