2013.7.25 学习笔记《windows核心编程》(一) Windows编程基础

《windows核心编程》(一)-----------2013.7.25

一、概念

Windows编程基础


•Windows应用程序的类型

–控制台程序 Console
           DOS程序,本身没有窗口,通过Windows DOS窗口执行
–窗口程序
           拥有自己的窗口,可以与用户交互
–库程序
           存放代码、数据的程序,执行文件可以从中取出代码执行和获取数据
-静态库程序
          扩展名LIB,在编译链接程序时,将代码放入到执行文件中
-动态库程序
           扩展名DLL,在执行文件执行时从中获取代码


•三种应用程序的对比
 -入口函数
           控制台程序 - main
           窗口程序 - WinMain
           动态库程序 - DllMain
           静态库程序 - 无入口函数
(不是所有有Main函数的程序都可以执行)
-文件存在方式
           控制台程序、窗口程序 - EXE文件
           动态库程序 - DLL文件
           静态库程序 - LIB文件
-执行方式
           控制台程序 - 在DOS窗口内执行。
           窗口程序 - 拥有自己的窗口的执行文件
           动态库程序 - 本身无法执行,由可执行程序或其他的DLL调用(动态)
           静态库程序 - 执行是不存在,代码会嵌入到可执行文件或DLL等中。

Windows开发环境

•Windows开发工具和库
– 开发工具  Visual Studio C++
           VC1.5 - VC6.0 – VC2005-VC2010( 10.0 )
– VC的编译工具
           编译器CL.EXE   将源代码编译成目标代码
           链接器LINK.EXE   将目标代码、库链接生成最终文件
           资源编译器RC.EXE   将资源编译,最终通过链接器存入最终文件
VC编译器编译链接流程:
              CL.EXE             LINK.EXE
.c/.cpp-------------->.obj-------------->.exe/.dll/.lib
– Windows库和头文件
-Windows库
          kernel32.dll - 提供了核心的API,例如进程、线程、内存管理等。 (核心,函数最少)
          user32.dll - 提供了窗口、消息等API (函数最多)
          gdi32.dll  - 绘图相关的API (专门处理绘图)
-头文件
Windows.h - 所有windows头文件的集合
          windef.h - windows数据类型 (微软自己的一套数据类型)
          winbase.h - kernel32的API
          wingdi.h - gdi32的API
          winuser.h - user32的API
          winnt.h - UNICODE字符集支持

Hello World 程序的相关函数

int WINAPI WinMain(
        HINSTANCE hInstance,//当前程序的实例句柄
	HINSTANCE hPrevInstance, //当前程序前一个实例句柄(已不常使用,为了兼容以前的函数所有才保留)
	LPSTR lpCmdLine,//命令行参数字符串
	int nCmdShow //窗口的显示方式
	);
	hPrevInstance - Win32下,一般为NULL	
int MessageBox(
	HWND hWnd,//父窗口句柄
	LPCTSTR lpText, //显示在消息框中的文字
	LPCTSTR lpCaption,  //显示在标题栏中的文字
	UINT uType //消息框中的按钮、图标显示类型(按钮与图标的参数使用"|"(位与)链接)


编译、链接和执行


•编译环境准备
          VC98\BIN\VCVARS32.BAT
•编译程序 - CL
         CL.EXE -? 显示CL的帮助
         /c  只编译不链接
         /Tc 编译C文件
         /Tp 编译C++文件
         /I  头文件路径
•链接程序 - LINK
         LINK.EXE xxx.obj xxx.lib
•执行

二、当天程序代码及运行结果

源代码  Hello.c

#include<windows.h>
int WinMain(	HINSTANCE 	hInstance,
		HINSTANCE 	hPreInstance,
		LPSTR		lpCmdLine,
		int		nCmdShow
		)
{
	MessageBox(	NULL,//没有父窗口
			"Hello!",
			"Information",
			MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION);
}

运行结果与分析图



将显示在消息框的文字的参数换成命令行参数字符串

#include<windows.h>
int WinMain(	HINSTANCE 	hInstance,
		HINSTANCE 	hPreInstance,
		LPSTR		lpCmdLine,
		int		nCmdShow
		)
{
	MessageBox(	NULL,//没有父窗口
			lpCmdLine,
			"Information",
			MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION);
}
运行结果



三、问题

1.WinMain()函数中参数lpCmdLine是什么;

          Pointer to a null-terminated string specifying the command line for the application, excluding the program name. To retrieve the entire command line, use the GetCommandLine function.(MSDN中的参数解释)

          当程序开始运行时 获取用户输入的命令指令基于命令行的程序 win32 console application 用户调用你的程序的时候,可以传递参数。

2.为什么MessageBox()函数中的消息框参数换成WinMain()函数中参数lpCmdLine可以得到目标文件的路径;

3.使用命令行链接程序时为什么用目标文件和user32.lib库文件进行链接而不是与user32.dll动态链接库进行链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值