Windows编程知识要点总结四-进程2

 

Windows应用程序的启动过程

操作系统实际上并不调用你编写的进入点函数。它调用的是C/C++ run-time startup function。该函数负责对C/C++ run-time library进行初
始化,这样,就可以调用malloc和free之类的函数。它还能够确保已经声明任何全局对象和静态对象能够在代码执行以前正确的创建。

所有的C/C++ run-time startup function的作用是相同的,其差别在于:是处理ANSI字符串还是Unicode字符串,以及他们在对C run-time
library进行初始化后,它们调用那个进入点函数。

启动函数的功能可概括如下:

检索指向新进程的完整命令行的指针

检索指向新进程的环境变量的指针

对C/C++ run time's global variables进行初始化。

对C运行期内存分配函数(mallco和calloc)以及low-level input/output routines使用的heap(堆)进行初始化

为所有的全局和静态C++类对象调用构造函数

当上述这些初始化操作完成后,C/C++ run-time startup function就调用应用程序的进入点函数。


如果编写了一个WinMain函数,它将以如下的形式被调用:

GetStartupInfo( &StartupInfo );

int nMainRetVal = WinMain( GetModuleHandle(NULL), NULL, pszCommandLineAnsi,

(StartupInfo.dwFlags & STARTF_USESHOWWINDOW)

? StartupInfo.wShowWindow : SW_SHOWDEFAULT );


当进入点函数返回时,启动函数便调用C运行期的exit函数,将返回值(nMainRetVal)传递给它。

Exit函数负责如下操作:

调用由_onexit函数的调用而注册的任何函数

为所有全局的和静态的C++类对象调用析构函数

调用操作系统的ExitProcess函数,将nMainRetVal传递给它。这使得操作系统能够撤销此进程并设置它的exit code(该代码保存在该
进程对应的内核对象中)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值