This question already has answers here:
wWinmain, Unicode, and Mingw
(3个答案)
4年前关闭。
因此,我试图使用Win32在 CodeBlocks 中创建一个窗口,到目前为止,仅此版本的WinMain有效(注意:这只是一个简单而天真的示例):
但是此版本不:
据我所知,后者期望第三个参数是指向一串宽字符的指针,而前者则不然。但是,当我在CodeBlocks中进行编译时,我得到的只是以下消息:
显然,CodeBlocks期望WinMain的版本不接收LPWSTR值作为参数。
我的问题是,我该如何配置CodeBlocks以便使用wWinMain进行编译?
但是
WinMain:
GetCommandLine:
注意,如果可以,您应该使用Visual Studio。免费!
(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]
}
但是
lpCmdLine
和GetCommandLineW
之间有区别。查看文件WinMain:
GetCommandLine:
注意,如果可以,您应该使用Visual Studio。免费!
关于c++ - WinMain可以编译,但是wWinMain不在CodeBlocks中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38418188/
10-11 07:10