注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

逍遥子 曰:

得失失得 何必患得患失 舍得得舍 不妨不舍不得

 
 
 

日志

 
 

C/C++运行期启动函数功能摘要<转自某位大牛>  

2012-02-12 11:10:21|  分类: 多线程相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

所有的C / C + +运行期启动函数的作用基本上都是相同的。它们的差别在于,它们究竟是处理A N S I 字符串还是U n i c o d e 字符串,以及它 们在对C 运行期库进行初始化后它们调用哪个进入点函数。Visual C++配有C 运行期库的源代码。可以在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 + +类对象调用构造函数。

当所有这些初始化操作完成后,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 代码。

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

表4-2 程序能够使用的C / C + +运行期全局变量

变量名 类型 说明
_osver unsigned int 操作系统的测试版本。例如Windows 2000 Beta 3是测试版本2031 。因此_osver的值是2031
_winmajor unsigned int 采用十六进制表示法的Windows主要版本。对于Windows2000来说,它的值是5
_winminor unsigned int 采用十六进制表示法的Windows次要版本。对于Windows2000来说,它的值是0
_winver unsigned int ( _winmajor < < 8 ) + _ winminor在命令行上传递的参数号
__argc unsigned int 带有指向ANSI/Unicode字符串的指针的__argc大小的数组
__argv char * * 带有指向ANSI/Unicode字符串的指针的__argc大小的数组
__wargv wchar_t * * 每个数组项均指向一个命令行参数
_environ char * * 指向ANSI/Unicode字符串的指针的数组。每个数组项指向一个环境字符串
_wenviron wchar_t * * 指向ANSI/Unicode字符串的指针的数组。每个数组项指向一个环境字符串
_pgmptr char * 正在运行的程序的ANSI/Unicode全路径和名字
_wpgmptr wchar_t * 正在运行的程序的ANSI/Unicode全路径和名字


  评论这张
 
阅读(872)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018