WinMain 编译,但 wWinMain 不在 CodeBlocks

WinMain compiles, but wWinMain does not in CodeBlocks

所以我正在尝试使用 Win32 在 CodeBlocks 中创建一个 window,到目前为止只有这个版本的 WinMain 可以工作(注意:这只是一个简单的和天真的例子):

#include <windows.h>

INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow ) {
    MessageBox( NULL, "Title", "Message", MB_OKCANCEL );
    return 0;
}

但是这个版本没有:

#include <windows.h>

INT WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, INT nCmdShow ) {
    MessageBox( NULL, "Title", "Message", MB_OKCANCEL );
    return 0;
}

据我所知,后者期望第三个参数是一个指向宽字符字符串的指针,而前者则不是。但是当我在 CodeBlocks 中编译时,我得到的只是这条消息:

undefined reference to WinMain@16

显然,CodeBlocks 需要的是不接收 LPWSTR 值作为参数的 WinMain 版本。 我的问题是,如何配置 CodeBlocks 以便它与 wWinMain 一起编译?

wWinMain 是特定于编译器的。 Visual Studio 支持它。 Code::Block 通常是用 MinGW 设置的,它会编译 wWinMain 但它会给出 link 错误,因为它无法将 wWinMain 识别为入口点,它仍在寻找 WinMain入口点。

您可以只使用第一个版本的 WinMain,然后使用 GetCommandLineW() 作为 Unicode 命令行。示例:

int argc;
wchar_t** argv = CommandLineToArgvW( GetCommandLineW(), &argc );
for (int i = 0; i < argc; i++)
{
    //output argv[i]
}

但是 lpCmdLineGetCommandLineW 是有区别的。请参阅文档

WinMain:

lpCmdLine: The command line for the application, excluding the program name

GetCommandLine:

GetCommandLineW(): The command-line string for the current process

请注意,如果可以,您应该使用 Visual Studio。免费!