应用程序的启动过程

应用程序的启动过程

ID:41008230

大小:32.00 KB

页数:5页

时间:2019-08-13

应用程序的启动过程_第1页
应用程序的启动过程_第2页
应用程序的启动过程_第3页
应用程序的启动过程_第4页
应用程序的启动过程_第5页
资源描述:

《应用程序的启动过程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、应用程序都会有一个入口函数,它在程序运行时才被调用。因此,创建控制应用程序时,此入口函数将会是main。  intmain(intargc,char*argv[]);操作系统实际上不是真调用main函数,而是去调用了C/C++运行期启动函数,此函数会初始化C/C++运行期库。因此,在程序中可以调用malloc和free之类函数。   如果,我们在控制台上省去了main函数,那么连接器将返回一个"unresolvedexternalsymbol"错误。   Win32程序启动过程,实际上是线程去调用一个CreateProcess函数

2、的时候,系统会创建一个进程内核对象,其使用计数被初始化为1.此进程内核对象不是进程本身,仅仅是一个系统用来管理这个进程的小的数据结构。系统然后为新的进程创建一个虚拟地址空间,加载应用程序运行时所需要的代码和数据。   系统接着会为新进程创建一个主线程,这个主线程通过执行C/C++运行期启动代码开始运行,C/C++运行期启动代码又会调用main函数。如果系统能成功创建新的进程和进程的主线程,CreateProcess函数会返回TRUE,否则返回FALSE。    一般将创建进程称为父进程,被创建的进程称为子进程。系统在创建新的进程时

3、会为新进程指定一个STARTUPINFO类型的变量,这个结构保护了父进程传递给子进程的一些显示信息。对图形界面应用程序来说,这些信息将影响新进程中主线程的主窗口显示:对控制台应用程序来说,如果有一个新的控制窗口被创建的话,这些信息将影响这个控制台窗口。STARTUPINFO结构定义如下。      typedefstruct{             DWORD   cb;               //本结构的长度,总是应该被设为sizeof(STARTUPINFO)             LPSTR       lpRes

4、erved;  //保留(Reserve)字段,即程序不使用这个参数             LPSTR       lpDesktop;   //指定桌面名称             LPSTR       lpTitle;          //控制台应用程序使用,指定控制台窗口标题             DWORD   dwX;             //             DWORD   dwY;             //             DWORD   dwXSize;               

5、     DWORD   dwYSize;             DWORD   dwXCountChars;  //控制台程序使用,指定控制台窗口的行数             DWORD   dwYCountChars;             DWORD   dwFillAttribute;     //控制台程序使用,指定控制台窗口的背景色             DWORD   dwFlags;          //标志。它的值决定了STARTUPINFO结构中哪些成员的值是有效的。             WORD

6、      wShowWindow;  //窗口的显示方式             WORD      cbReserved2;             LPBYTE      lpReserved2;             HANDLE    hStdInput;      //控制台程序使用,几个标准句柄             HANDLE    hStdOutput;             HANDLE    hStdError;       }STARTUPINFO,*LPSTARTUPINFO;         一

7、个进程可以调用GetStartupInfo函数来取得父进程创建自己时使用的STARTUPINFO结构。  事实上,Windows系统就是通过调用这个函数来取得当前进程的创建信息,以便对新进程中主窗口的属性设置默认值。  函数定义如下。  VOIDGetStrtupInfo(LPSTARTUPINFOlpStartupInfo);   //取得当前进程被创建时指定的STARTUPINFO结构。   定义一个STARTUPINFO结构的对象以后,总要在使用此对象之前将对象的cb成员初始化为STARTUPINFO结构大小。   如下所示

8、:   STARTUPINFOsi=[sizeof(si)];     //将cb成员初始化为sizeof(si),其他成员初始化为0   ::GetStrartupInfo(&si);    初始化cb成员这一步是必须的。因为随着WIndows版

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。