开发者

wWinmain, Unicode, and Mingw

开发者 https://www.devze.com 2023-01-13 07:10 出处:网络
I am working on learning the windo开发者_Python百科ws API and am using mingw as my compiler with Code::Blocks as my IDE.I have run into an issue with using the wWinMain function.I used the program loc

I am working on learning the windo开发者_Python百科ws API and am using mingw as my compiler with Code::Blocks as my IDE. I have run into an issue with using the wWinMain function. I used the program located here link text. It compiles fine on VSC++ 2008 express but when using mingw i get the "undefined reference to WinMain@16" error. I have figured out what the problem is (i think). By replacing the wWinMain with just Winmain and the String pointer PWSTR with LPSTR it compiles perfectly. My question is, how can i fix this, and if not, is not using Unicode that big of a deal.

Thanks.


For old versions of MinGW, you can use a wrapper:

mingw-unicode-main:

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

Simple wrappers to add wmain and wWinMain support in MinGW

These wrappers allow for use of wmain / wWinMain in MinGW seamlessly with Unicode (WCHAR), regular (CHAR), or the ability to choose (TCHAR).

The instructions for using them are in the files. Also take a look at other programs that use them.


For new versions of MinGW, you should use the -municode option, like it says in the mingw-unicode-main readme:

Note: This should no longer be used as MinGW now has a built-in solution. Add -municode to the command line (and possibly extern "C" to the wmain function).

The -municode option works with MinGW-w64. In 2012-07, when I tried MinGW, it did not have the -municode option.

Here is how to install MinGW-w64:

Target Win32:

  • Home > Toolchains targetting Win32 > Personal Builds > rubenvb > gcc-4.7-release:

    http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/rubenvb/gcc-4.7-release/

  • On Windows, you want "i686-w64-mingw32-gcc-4.7.2-release-win32_rubenvb.7z".

  • Extract folder to the root of your drive.

  • Rename the "mingw32" folder to "MinGW-32".

Target Win64:

  • Home > Toolchains targetting Win64 > Personal Builds > rubenvb > gcc-4.7-release:

    http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/rubenvb/gcc-4.7-release/

  • On Windows, you want "x86_64-w64-mingw32-gcc-4.7.2-release-win32_rubenvb.7z".

  • Extract folder to the root of your drive.

  • Rename the "mingw64" folder to "MinGW-64".


Unicode-related questions:

  • How do I use the wmain() entry point in Code::Blocks?
  • Compiling Windows program in Dev-C++ gives error
  • #define _UNICODE not working with MinGW + CodeBlocks


Use the plain (non unicode) WinMain function, and then get your unicode command line using GetCommandLineW. MinGW doesn't know about wWinMain.

You are probably going to find working on MinGW difficult; 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) which made interfacing with Unicode Windows bits difficult.

Do you have anything against MSVC?


I know that I should have commented instead of answering, but I don't have enough reputation.

I want to add that I had to change the links to exe files in [Settings > Compiler... > Toolchain Executables > Program Files] in order to get the version of Community to run.

Also my CodeBlocks from 2016 claimed that it was Unicode but the -municode option didn't work, only the MiniGW update to the version by Community worked.

If you want to use main instead of wmain again, you have to delete -municode option.

0

精彩评论

暂无评论...
验证码 换一张
取 消