This question already has answers here:
wWinmain, Unicode, and Mingw

(3个答案)


4年前关闭。




因此,我试图使用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中进行编译时,我得到的只是以下消息:



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

最佳答案

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:



GetCommandLine:



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

关于c++ - WinMain可以编译,但是wWinMain不在CodeBlocks中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38418188/

10-11 07:10