WinMain编译,但wWinMain不在CodeBlocks中

时间:2016-07-17 05:28:23

标签: c++ winapi codeblocks winmain

所以我正在尝试使用Win32在 CodeBlocks 中创建一个窗口,到目前为止只有这个版本的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中编译时,我得到的就是这条消息:

  

对WinMain @ 16的未定义引用

显然,CodeBlocks期望WinMain的版本不接收LPWSTR值作为参数。 我的问题是,我如何配置CodeBlocks以便用wWinMain编译?

1 个答案:

答案 0 :(得分:3)

wWinMain是特定于编译器的。它受Visual Studio支持。 Code :: Block通常是用MinGW设置的,它会编译wWinMain但是它会给出链接错误,因为它不能识别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:应用程序的命令行,不包括程序名称

GetCommandLine

  

GetCommandLineW():当前进程的命令行字符串

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