Reputation: 1949
I am working on learning the Windows 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 in VS C++ 2008 Express, but when using mingw I get the error:
undefined reference to WinMain@16
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?
Upvotes: 18
Views: 19249
Reputation: 101
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.
Upvotes: 4
Reputation: 7183
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:
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:
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:
Upvotes: 28
Reputation: 106559
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?
Upvotes: 18