C++ Programmer's Cookbook

{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}

windows核心编程--windows程序的执行

Windows 应用程序的执行

 

Windows 支持两种类型的应用程序。一种是基于图形用户界面( GUI )的应用程序,另一种是基于控制台用户界面( CUI )的应用程序。 ( 两者间可以相互转化 , 没有明确的界限 , 就是说可以让 CUI 程序中可以有 Dialog 界面等 , GUI 界面中也可以有 console 来输出信息 )

 

对于一个应用程序:

操作系统实际上先调用的是C / C + +运行期启动函数。该函数负责对C / C + +运行期库进行初始化,这样,就可以调用m a l l o c f r e e 之类的函数。它还能够确保已经声明的任何全局对象和静态C + +对象能够在代码执行以前正确地创建。链接程序负责在它连接可执行文件时选择相应的C / C + +运行期启动函数。如果设定了/ S U B S Y S T E M : W I N D O W S 链接程序开关,那 么该链接程序期望找到一个Wi n M a i n w Wi n m a i n函数。如果这两个函数都不存在,链接程序便返回一个未转换的外部符号的错误消 息。否则,它可以分别选择Wi n M a i n C RT S t a r t u p 函数或w Wi n M a i n C RT S t a r t u p 函数。

启动函数的功能归纳如下:

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

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

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);
 


当进入点函数返回时,启动函数便调用 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 代码。

 

附录 : 各种应用程序的进入点及对应的启动函数

 

应用程序类型

进入点

嵌入可执行文件的启动函数

需要ANSI字符和字符串的GUI应用程序

WinMain

WinMainCRTStartup

需要Unicode字符和字符串的GUI应用程序

wWinMainw

WinMainCRTStartup

需要ANSI字符和字符串的CUI应用程序

main

mainCRTStartup

需要Unicode字符和字符串的CUI应用程序

wmain

wmainCRTStartup

 

 

 

posted on 2006-09-12 11:57 梦在天涯 阅读(1560) 评论(3)  编辑 收藏 引用 所属分类: Windows API

评论

# re: windows核心编程--windows程序的执行 2006-09-12 23:47 shaker

建议重新排版 看的累  回复  更多评论   

# re: windows核心编程--windows程序的执行 2006-09-12 23:48 shaker

奇怪 怎么firefox就是好的呢?  回复  更多评论   

# re: windows核心编程--windows程序的执行 2009-02-04 01:28 iamatig

0,以前一个人看书总会碰到很多困难,总是半途而废
好多难懂的地方,往往是因为翻译得不好,难理解,又不方便问,要问得找到看过此书的人,而且最好是最近年看过的人。结果只能自己反复看,极费时间,往往要花好些时间才能理解,或者只好跳过,甚至影响对其它内容的理解,感觉真没劲.
也曾经觉得笔记心得还是很有用的,可以帮助自己去牢记知识,但写了两篇就没劲写下去了.因为太累了,真把自己的笔记全写上去,也可以当得半本书了,但我不是说那种把原文简单抄几句后的笔记。
现在我经常发现,计算机书籍中的一些内容,往往很容易用生活中的一些普通人常见的事去比较,他们好像有相同的地方.
1,最后我总结出来,生动的类比就是最好的学习方法!
好的类比不但让你能深入地理解,而且很容易让你记牢,过目不忘!这样就提高了效率,节约了时间,时间是宝贵的,而且年轻时代的时间尤其宝贵!所以我深觉得,有必要要好好地把握住时间!不浪费时间.传统的学习是很费时间的,因为闭门造车,费时费劲,其实也许你不懂的这段话,别人早就领悟出来了,也许他花了很长时间才领悟过来,没关系,他共享出来,等于是节约了你的时间,而你又共享出自己的领悟,他看到,等于也是节约了时间,只要参与的人多,大家就容易多了!
2,交流心得就是彼此节约时间,延长青春!
大家看一本专业书要多长时间?一周?一个月?一年?其实,甚至几年后还觉得那书没完全看懂的人不在少数!为什么呢?书难懂啊!而且好不容易有了点理解还不敢肯定自己对不对。去问作者?呵,不大方便吧,显然不切实际.
看一本杂志要多长时间?看一本小人书要多长时间?想必大家都有小时侯看小人书和漫画的经历吧,那个效率,不是盖的,每个人都会很高,而且效果还不差,看完后都能说个大概出来。为什么?容易懂啊,内容容易懂,语言也容易懂啊,都是常见的用语,当然容易懂,谁见过平常聊天也要思考半天才明白过来的?有,那也绝对是说话的人没表达好或故意含糊.
3,所以,通俗易懂的语言+通俗易懂的内容=极高的效率.
而现在的专业书籍,往往是:晦涩的语言+专业的内容=蜗牛般的效率.
一本书的发行量有多大?少则几千本,多则几万本。如果这些人都知道有我们这样一个网站,都习惯于上我们网站来一起讨论同一本书,那是多么大的智慧在一起啊!每个人进度不同,各针对一部分自己很不容易搞懂(章,节,段都行)的内容发表自己见解,会多大地加快速度啊!
这样的思想碰撞,是人类文明的进步力量!
想想网络,带来的改革日益巨大,我们学习的习惯也应该改一改了!
现在很多流行的所谓多媒体学习方法,其实我觉得还是很不足,因为很多是应景而作,根本没花心思。如果是大家你一点我一点地,都是下足了心思,所费时间不多,又很有质量,那就太好了。
4,合适的人+合适的方法=最好的结果
类比的方法很好,可惜基本上写书的人都少用此法.没关系,我们可以自己来,你一段,我一段,大家很快就可以写出生动易懂通俗的笔记来了!
希望大家都好好考虑一下我的方法,大家多想想如何做才好,这样我们就节约自己的时间了,一日千里!
http://www.nba5i.com/bbsxp/
谢谢!  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

EMail:itech001#126.com

导航

统计

  • 随笔 - 461
  • 文章 - 4
  • 评论 - 746
  • 引用 - 0

常用链接

随笔分类

随笔档案

收藏夹

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

积分与排名

  • 积分 - 1747755
  • 排名 - 5

最新评论

阅读排行榜