开发环境搭建好以后,就可以开始第一次win32程序
```
#include <windows.h>
#include <tchar.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
MessageBox(NULL, _T("Hello C Cmd Compile欢迎"), _T("Welcome"), MB_OKCANCEL);
return 0;
}
```
代码很短,
**WinMain** 是Win32下的窗口程序的入口函数,就像是C语言的 main函数一样。
**WINAPI** 是windef.h中定义的一个常量。 ``` #define WINAPI __stdcall```,表示函数参数按照从又向左的方式压入堆栈,也有诸如\_\_cdecl、\_\_pascal等规则。使用\_\_stdcall还是\_\_cdecl或\_\_pascal,在纯Windows编程下并非特别需要。所以这里如果不写```WINAPI``` 也能正常生成程序。
有了以上程序源文件,现在就是要编译,链接生成exe文件
* 使用cl命令编译源程序,具体用法详见[cl命令的用法](https://docs.microsoft.com/zh-cn/cpp/build/reference/d-preprocessor-definitions?view=vs-2019)
```
cl /c /D UNICODE /D _UNICODE cwin.c
/c 指只编译,不链接
/D 指预处理选项,这里预定义了程序字符集为UNICODE.
没带下划线的UNICODE主要是针对Windows的头文件。
带下划线的\_UNICODE主要是针对C运行库的。
同时要保证源文件的文本格式是unicode格式,用记事本打开源文件cwin.c,选择“另存为”, 再选择unicode即可
```
执行完成以上命令,在当前目录下就会生成同名的cwin.obj文件。
* 使用 link命令 链接生成exe文件
``` link *.obj /SUBSYSTEM:WINDOWS /MACHINE:X86 user32.lib```
执行以上命令即可生成exe文件。
**这里的重点是如何处理unicode字符串:**
代码中使用 ```_T("")``` 这个宏来包裹字符串,其意思是通过不同的编译项,可以编译成ANSI版本 或者 Unicode版本, 如果是L 宏。则只能编译成Unicode版本。使用这两个宏要引用 tchar.h 头文件。
然后编译的时候要带上 ``` /D UNICODE /D _UNICODE ``` 这两个编译选项,才会生效,否则运行程序遇到中文会乱码