启动函数过程

Posted on 2008-05-09 23:38 Herbert 阅读(237) 评论(0)  编辑 收藏 引用
检索指向新进程的完整命令行的指针。

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

• 对C / C + +运行期的全局变量进行初始化。如果包含了S t d L i b . h 文件,代码就能访问这些变量。

• 对C 运行期内存单元分配函数(m a l l o c 和c a l l o c )和其他低层输入/输出例程使用的内存栈进行初始化。

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

当所有这些初始化操作完成后,C / C + +启动函数就调用应用程序的进入点函数。如果编写了一个w Wi n M a i n 函数,它将以下面的形式被调用 :

GetStartupInfo(&StartupInfo);
int nMainRetVal = wWinMain(GetMjduleHandle(NULL),
NULL, pszCommandLineUnicode,
(StartupInfo.dwFlags & STARTF_USESHOWWINDOW) ?
StartupInfo.wShowWindow:SW_SHOWDEFAULT);
如果编写了一个Wi n M a i n 函数,它将以下面的形式被调用:
GetStartupInfo(&StartupInfo);
int nMainReLVal = WinMain(GetModuleHandle(NULL),
NULL, pszCommandLineANSI,
(StartupInfo.dwFlags & STARTF_USESHOWWINDOW) ?
Startupinfo.wShowWindow:SW_SHOWDEFAULT);
如果编写了一个w m a i n或m a i n 函数,它将以下面的形式被调用:
int nMainRetVal = wmain(__argc, __wargv, _wenviron);
int nMainRetVal = main(_argc, __argv, _environ);
当进入点函数返回时,启动函数便调用C 运行期的e x i t 函数,将返回值(n M a i n R e t Va l )传递给它。E x i t 函数负责下面的操作:

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

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

• 调用操作系统的ExitProcess函数,将nMainRetVal传递给它。这使得该操作系统能够撤消进程并设置它的e x i t 代码。

下表显示了程序能够使用的C / C + +运行期全局变量。


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理