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]
}
但是 lpCmdLine
和 GetCommandLineW
是有区别的。请参阅文档
lpCmdLine
: The command line for the application, excluding the program name
GetCommandLineW()
: The command-line string for the current process
请注意,如果可以,您应该使用 Visual Studio。免费!
所以我正在尝试使用 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]
}
但是 lpCmdLine
和 GetCommandLineW
是有区别的。请参阅文档
lpCmdLine
: The command line for the application, excluding the program name
GetCommandLineW()
: The command-line string for the current process
请注意,如果可以,您应该使用 Visual Studio。免费!