第一个工程
1)打开Visual Studio,如下地建一个工程
2)选择一个空的工程
3) 新建一个文件
这个不解释了吧,你肯定会添加一个cpp文件的。
4)输入如下代码
#include <windows.h>
#pragma comment(linker, "/entry:\"main\" /subsystem:\"windows\"")
int main(){
MessageBox(NULL, TEXT("Hello,World"),TEXT("NULL"), MB_OK);
}
5)按下 Ctrl + F5
此时可以运行程序了,是不是看到了一个小窗口呢?是不是这此代码比较熟悉呢?
、
是的,事情就是这样,你看到的就是Windows上开发所需要的一切。
代码解释
第一行
第一行是#include <windows.h>,任何Windows平台上的应用程序肯定需要引用一些Windows的函数或者变量,而这些函数或者变量的声明就在Windows.h里面,所以我们需要包含它,这跟大家包含stdio.h一样的道理。
第二行
也许大家看到的Windows程序是以WinMain开头的,然而,你们在这里面看到的是main?有人怀疑我写错了,事实上,我没有写错,所谓的main函数是一个逻辑上的概念,也就是告诉链接器,我这个程序要从哪里开始执行,C(++)里面的入口函数是main,Windows上是WinMain,这些并没有错,当然,也允许我们自己设定入口函数。这里面的
#pragma comment(linker, "/entry:\"main\" /subsystem:\"windows\"")
里面的/entry其实是设置入口函数,/subsystem其实是设置子系统(gui的或者console的),gui的程序是没有黑框框的,console的程序是大家平时看到的一个黑框框,大家的第一次hello,world基本上是交给它的,正如大家的第一次上网基本交给了IE一样。
第三行
第三行是一个函数调用,大家肯定知道的对吧,这个函数调用的是MessageBox,即一个Windows里面的API,定义于user32.dll里面。为了方便大家写程序,我建议大家安装一个叫做msdn的东西,如果大家不知道哪里下载,可以从以下网址下载
http://download.microsoft.com/download/F/D/E/FDE79687-B716-4893-9BE3-1512F40388B1/CHSMSDNX1530343.ISO。然后你在里面输入MessageBox,你会看到如下所说明:
显然,这个文档告诉你MessageBox各参数的用法与说明,具体怎么翻译我不解释了吧,你懂的。
细节说明
TEXT是什么
把鼠标放在TEXT上面,然后按下F12,你会看到如下的说明,其定义等价于如下的:
#ifdef UNICODE
#define TEXT(queto) L##queto
#else
#define TEXT(queto) queto
#endif
从中可以从字面地看出来吧
UNICODE是什么
在C语言中我们可以一般写字符串中都是用“Hello,World”这种写法,而没有上面的那种TEXT("Hello,World")的写法,在Windows里面,为了便于操作系统的移植,使用了两种字符表示,一个是多字节码,一种是UNICODE表示,如果在一个ascii字符串前面加上L,那么它就变成了UNICODE串,比如L"ABC"
可以刚才如下网址:http://baike.baidu.com/view/40801.htm
##是什么
在Windows平台的C语言中有##表示串连接,比如“ABC”##"DEF"你就得到了"ABCDEF"了,这个估计很多人都不知道。这个东西在MFC的实现中用得特别多。
LPTSTR是什么
通过在LPTSTR上按F12,可以看到如下的等价定义
#ifdef UNICODE
#define LPTSTR wchar_t*
#else
#define LPTSTR char*
#endif
因为LPTSTR表示字符串,上面已经提到了,在UNICODE中,字符串是UNICODE串,也即是const wchar_t[],在非UNICODE中,字符串是const char*,即const char[]。LPTSTR的使用避免了在不同环境下源码编译的问题。
MessageBox是一个函数?
其实 ,MessageBox不是一个函数,与之相关的函数有两个,MessageBoxA与MessageBoxW,根据是否使用UNICODE串从而定义MessageBox是MessageBoxA还是MessageBoxW,并且,在user32.dll里面同时实现了这两个API,当然MessageBoxA的实现中会调用MessageBoxW。
通过 dumpbin -exports user32.dll可以看到如下的结果
dumpbin -exports可以看出一个dll里面导出了什么函数,这个工具是由visual studio sdk提供的,大家安装完visual sutdio之后就会自动安装这个工具,不需要单独下载。
由于今天不太高兴,就先写第一章节到这里,以后有时间再写,另外,快放暑假了,准备回家休息几个星期。