文档详情

Windows核心编程进程.ppt

发布:2017-06-18约4.93千字共31页下载文档
文本预览下载声明
Windows核心编程 许红星 Email:hxxu@ynu.edu.cn 云南大学软件学院 进程 编写第一个Windows应用程序 CreateProcess函数 终止进程的运行 子进程 枚举系统中运行的进程 编写第一个Windows应用程序 编写第一个Windows应用程序 Wi n d o w s支持两种类型的应用程序。 一种是基于图形用户界面( G U I)的应用程序 另一种是基于控制台用户界面(C U I)的应用程序。 编写第一个Windows应用程序 当使用Microsoft Visual C++来创建应用程序时,这种集成式环境安装了许多不同的链接程序开关,这样,链接程序就可以将相应的子系统嵌入产生的可执行程序。 用于命令行程序的链接程序开关是/ S U B S Y S T E M : C O N S O L E 而用于G U I 应用程序的链接程序开关是S U B S Y S T E M : W I N D O W S。 编写第一个Windows应用程序 编写第一个Windows应用程序 编写第一个Windows应用程序 Wi n d o w s / Visual C++编程新手常犯的错误之一是,当创建新的应用程序时,不小心选择了错误的应用程序类型。例如,编程员可能创建一个新的Wi n 3 2应用程序项目,但是创建了一个进入点函数m a i n。 将m a i n函数改为Wi n M a i n。通常这不是最佳的选择,因为编程员可能想要创建一个控制台应用程序。 用Visual C++创建一个新的Win32 控制台应用程序,并将现有的源代码添加给新应用程序项目。这个选项冗长而乏味,因为它好像是从头开始创建应用程序,而且必须删除原始的应用程序文件。 编写第一个Windows应用程序 单击Project Settings 对话框的L i n k选项卡,将/ S U B S Y S T E M : W I N D O W S开关改为/ S U B S Y S T E M : C O N S O L E。这是解决问题的一种比较容易的方法,很少有人知道他们只需要进行这项操作就行了。 单击Project Settings对话框的L i n k选项卡,然后全部删除/ S U B S Y S T E M : W I N D O W S开关。这是我喜欢选择的方法,因为它提供了最大的灵活性。现在,连接程序将根据源代码中实现的函数进行正确的操作。当用Visual C++的Developer Studio创建新Wi n 3 2应用程序或Wi n 3 2控制台应用程序项目时,我不知道为什么这没有成为默认设置。 编写第一个Windows应用程序 可以在CR t0.c文件中找到这4个启动函数的代码。现在将启动函数的功能归纳如下: 检索指向新进程的完整命令行的指针。 检索指向新进程的环境变量的指针。 对C / C + +运行期的全局变量进行初始化。如果包含了S t d L i b . h文件,代码就能访问这些变量。表4 - 1列出了这些变量。 对C运行期内存单元分配函数( m a l l o c和c a l l o c)和其他低层输入/输出例程使用的内存栈进行初始化。 为所有全局和静态C + +类对象调用构造函数。 编写第一个Windows应用程序 编写第一个Windows应用程序 调用由_ o n e x i t函数的调用而注册的任何函数。 为所有全局的和静态的C + +类对象调用析构函数。 调用操作系统的E x i t P r o c e s s函数,将n M a i n R e t Va l传递给它。这使得该操作系统能够撤消进程并设置它的e x i t代码。 编写第一个Windows应用程序 编写第一个Windows应用程序 G e t M o d u l e H a n d l e函数的两个重要特性 首先,它只查看调用进程的地址空间。如果调用进程不使用常用的对话框函数,那么调用G e t M o d u l e H a n d l e并为它传递“C o m D l g 3 2”后,就会返回N U L L,尽管C o m D l g 3 2 . d l l可能加载到了其他进程的地址空间。 第二,调用G e t M o d u l e H a n d l e并传递N U L L值,就会返回进程的地址空间中可执行文件的基地址。因此,即使通过包含在D L L中的代码来调用( N U L L),返回的值也是可执行文件的基地址,而不是D L L文件的基地址。 编写第一个Windows应用程序 当一个新进程创建时,它要传递一个命令行。该命令行几乎永远不会是空的,至少用于创建新进程的可执行文件的名字是命令行上的第一个标记。 也可以
显示全部
相似文档