所以我正在尝试使用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编译?
答案 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]
}
lpCmdLine
和GetCommandLineW
之间存在差异。参见文档
lpCmdLine
:应用程序的命令行,不包括程序名称
GetCommandLineW()
:当前进程的命令行字符串
注意,如果可以,您应该使用Visual Studio。它是免费的!