程序入口函数 main 和 WinMain
Linux 上的程序开发和 Windows 上有很大不同。程序入口函数不一样是其中的差别之一。
main()
int main(int argc, char *argv){
return 0;
}
WinMain()
Windows 环境下的 GUI 程序入口函数是 WinMain()
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prev, LPSTR cmdline, int show){
return 0;
}
Use main() as WinMain()
有意思的是,实际上可以从 main()
函数开始写一个 Windows GUI 程序。
WinMain()
函数的参数是可以通过相应的 API 得到的。
#include <windows.h>
int main(int argc, char *argv[]){
HINSTANCE hInst = GetModuleHandle(NULL);
HINSTANCE prev = NULL;
LPSTR cmdline = GetCommandLineA();
int show;
...
}
用 GCC 进行编译的命令如下
i686-w64-mingw32-gcc -mwindows -o test.exe test.c
Message Loop in WinMain()
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prev, LPSTR cmdline, int show){
...
MSG msg;
while (GetMessage ( &msg, NULL, 0, 0 ) ) {
TranslateMessage( &msg );
DispatchMessage ( &msg );
}
...
return msg.wParam
}
Unicode wmain() and wWinMain()
main()
和 WinMain()
的参数都是基于 ascii 字符。
为了支持 Unicode 字符,wmain()
和 wWinMain()
应需而生。
int wmain( int argc, wchar_t* argv[] );
int WINAPI wWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PWSTR lpCmdLine, // LPSTR in WinMain()
int nCmdShow
);