﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-大漠落日-随笔分类-C语言派系</title><link>http://www.cppblog.com/smagle/category/9498.html</link><description>while(!dead) study++;</description><language>zh-cn</language><lastBuildDate>Sun, 27 Oct 2013 21:48:01 GMT</lastBuildDate><pubDate>Sun, 27 Oct 2013 21:48:01 GMT</pubDate><ttl>60</ttl><item><title>C++对象的空间分配与初始化时机</title><link>http://www.cppblog.com/smagle/archive/2012/03/10/167547.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Sat, 10 Mar 2012 03:55:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2012/03/10/167547.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/167547.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2012/03/10/167547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/167547.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/167547.html</trackback:ping><description><![CDATA[C++规定，一个变量可以在程序范围内的任何地方定义，也就是说在这个变量定义之前编译器是无法给它分配内存空间的。在这点上和C不同，C强制要求变量的声明和定义必须放在条件块的开始。<br />虽然如此，但是现在的C++编译器通常像C编译器一样，在一个程序块的开头就分配好所有变量的内存。这一切对于程序员来说是透明的，因为我们的变量在定义之前总是无法得到存储空间，即便编译器这么干了！<br />即使存储空间在一开始就被分配了，但是C++对象的构造函数仍然需要到对象定义的时候才会被调用，因为标识符只有到此时才是有效的。编译器为了防止程序员用一些条件选择手段跳过变量的初始化就开始使用，它会检查代码中是否把一个变量对象的定义放到了条件块中，比如switch的case块，goto等，看下面这段代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;A{<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">A(){}&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">对于VC2005和GCC来说，只有提供构造函数，编译器才会检测出错误</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;b;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">};<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">i;<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">goto</span><span style="color: #000000; ">&nbsp;flag;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;fsd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">构造函数的调用被goto跳过</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;fsd.b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">flag:<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">&nbsp;(i)<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;a;<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;aa;<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa.b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">a.b</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">error&nbsp;C2360:&nbsp;initialization&nbsp;of&nbsp;'a'&nbsp;is&nbsp;skipped&nbsp;by&nbsp;'case'&nbsp;label</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">default</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">fsd.b</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">如果输入参数小于10，那么fsd的初始化将被跳过，程序运行到这里崩溃</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">}</span></div>输入1，跳过了fsd的初始化，程序运行结果不可知。<br />输入10，跳过了a的初始化，程序运行结果同样不可知。<br /><br /><img src ="http://www.cppblog.com/smagle/aggbug/167547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2012-03-10 11:55 <a href="http://www.cppblog.com/smagle/archive/2012/03/10/167547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2005 IDE BUG</title><link>http://www.cppblog.com/smagle/archive/2011/02/23/140489.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Wed, 23 Feb 2011 02:10:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2011/02/23/140489.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/140489.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2011/02/23/140489.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/140489.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/140489.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 发现一个VS2005 IDE的bug，不知道有没有同僚已经发现？&nbsp;&nbsp;<a href='http://www.cppblog.com/smagle/archive/2011/02/23/140489.html'>阅读全文</a><img src ="http://www.cppblog.com/smagle/aggbug/140489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2011-02-23 10:10 <a href="http://www.cppblog.com/smagle/archive/2011/02/23/140489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>net-snmp库snmp API解读分析</title><link>http://www.cppblog.com/smagle/archive/2011/01/26/139360.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Wed, 26 Jan 2011 09:14:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2011/01/26/139360.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/139360.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2011/01/26/139360.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/139360.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/139360.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: net-snmp API分析之一，重点分析了几个，如open，init，select，read，send等&nbsp;&nbsp;<a href='http://www.cppblog.com/smagle/archive/2011/01/26/139360.html'>阅读全文</a><img src ="http://www.cppblog.com/smagle/aggbug/139360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2011-01-26 17:14 <a href="http://www.cppblog.com/smagle/archive/2011/01/26/139360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内存管理之引用计数</title><link>http://www.cppblog.com/smagle/archive/2010/07/23/120758.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Fri, 23 Jul 2010 02:27:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2010/07/23/120758.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/120758.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2010/07/23/120758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/120758.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/120758.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 分析采用引用计数的优点及需要关注的若干方面&nbsp;&nbsp;<a href='http://www.cppblog.com/smagle/archive/2010/07/23/120758.html'>阅读全文</a><img src ="http://www.cppblog.com/smagle/aggbug/120758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2010-07-23 10:27 <a href="http://www.cppblog.com/smagle/archive/2010/07/23/120758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个列子演示vs2010 c++新特性</title><link>http://www.cppblog.com/smagle/archive/2010/06/10/117520.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Thu, 10 Jun 2010 00:48:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2010/06/10/117520.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/117520.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2010/06/10/117520.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/117520.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/117520.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 近日托安装雪豹的“福”，格了XP装了win7，前段时间看了C++0X标准以及VS2010诱人的新特性，不禁心痒痒在线安装了VS2010，然后手写了这个列子用来测试新增的特性。&nbsp;&nbsp;<a href='http://www.cppblog.com/smagle/archive/2010/06/10/117520.html'>阅读全文</a><img src ="http://www.cppblog.com/smagle/aggbug/117520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2010-06-10 08:48 <a href="http://www.cppblog.com/smagle/archive/2010/06/10/117520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C Puzzles详细分析</title><link>http://www.cppblog.com/smagle/archive/2010/05/27/116211.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Thu, 27 May 2010 09:04:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2010/05/27/116211.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/116211.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2010/05/27/116211.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/116211.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/116211.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: C怪异问题之分析解答，有部分题目为搞清楚&nbsp;&nbsp;<a href='http://www.cppblog.com/smagle/archive/2010/05/27/116211.html'>阅读全文</a><img src ="http://www.cppblog.com/smagle/aggbug/116211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2010-05-27 17:04 <a href="http://www.cppblog.com/smagle/archive/2010/05/27/116211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>typeid详解</title><link>http://www.cppblog.com/smagle/archive/2010/05/14/115286.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Fri, 14 May 2010 02:58:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2010/05/14/115286.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/115286.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2010/05/14/115286.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/115286.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/115286.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 详细介绍了typeid的使用和注意要点&nbsp;&nbsp;<a href='http://www.cppblog.com/smagle/archive/2010/05/14/115286.html'>阅读全文</a><img src ="http://www.cppblog.com/smagle/aggbug/115286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2010-05-14 10:58 <a href="http://www.cppblog.com/smagle/archive/2010/05/14/115286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ShellExecute启动exe程序要点</title><link>http://www.cppblog.com/smagle/archive/2010/03/16/109807.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Tue, 16 Mar 2010 03:10:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2010/03/16/109807.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/109807.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2010/03/16/109807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/109807.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/109807.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; ShellExecute和ShellExecuteEx函数主要用于执行应用程序，它们可以接收一个文件名并能自动获得同文件名相关的可执行文件名。此
外，它们还支持系统安全认证。如果在NT上设定了用户的可执行权限，ShellExecute和ShellExecuteEx函数将会在创建新的进程前检查权限CreateProcess和WinExec函数则没有这项功能)。函数调用的流程如下：<br>
<ol>
    <li>获得将要执行的程序名，例如test.exe。</li>
    <li>根据程序名检查用户权限，如果该用户无权操作，拒绝之。</li>
    <li>激活全部已注册的IshellExecuteHook扩展。</li>
    <li>当所有扩展和权限都同意执行，准备创建新的进程。</li>
    <li style="color: red;">在注册表中查询程序，查找路径为：HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\windows\CurrentVersion\App Paths\程序名，在该项下找程序的启动路径，如果找到，启动并返回；如果没找到，进入步骤6。</li>
    <li><span style="color: red;">根据ShellExecute的设置的目录参数查找，如果存在程序，启动并返回；否则返回失败。</span></li>
</ol>
&nbsp;&nbsp;&nbsp;&nbsp; 步骤5和6是我再查找一个程序运行错误时发现的。<br>&nbsp;&nbsp;&nbsp;&nbsp; 原来程序之前安装过一次，后来更改启动策略，不再独立安装而采用绿色包，结果程序中用ShellExecute启动程序时不对，查找分析之后发现是调用了错误的程序，卸载之前安装的就正常了。<br>&nbsp;&nbsp;&nbsp;&nbsp; 误打误撞，尽然发现之前对这两个函数理解太过肤浅，网上查了查，发现都没有人介绍，我这里再补充我发现的2点，告诫自己以后不到万不得已，不要使用这两个函数启动自己的应用程序。<br><img src ="http://www.cppblog.com/smagle/aggbug/109807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2010-03-16 11:10 <a href="http://www.cppblog.com/smagle/archive/2010/03/16/109807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个整人的小程序</title><link>http://www.cppblog.com/smagle/archive/2010/01/30/106802.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Sat, 30 Jan 2010 05:22:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2010/01/30/106802.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/106802.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2010/01/30/106802.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/106802.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/106802.html</trackback:ping><description><![CDATA[<br>检查电脑忠诚度<br><br>功能：99次的弹出对话框+注销，如果不小心触发了机关，呵呵，自认倒霉吧。<br><br><a href="http://www.cppblog.com/Files/smagle/pcChecker.rar">点击这里下载</a><br><br> <img src ="http://www.cppblog.com/smagle/aggbug/106802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2010-01-30 13:22 <a href="http://www.cppblog.com/smagle/archive/2010/01/30/106802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断URL是否合法C++代码</title><link>http://www.cppblog.com/smagle/archive/2010/01/08/105184.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Fri, 08 Jan 2010 11:05:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2010/01/08/105184.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/105184.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2010/01/08/105184.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/105184.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/105184.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 判断URL是否合法的C++代码.&nbsp;&nbsp;<a href='http://www.cppblog.com/smagle/archive/2010/01/08/105184.html'>阅读全文</a><img src ="http://www.cppblog.com/smagle/aggbug/105184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2010-01-08 19:05 <a href="http://www.cppblog.com/smagle/archive/2010/01/08/105184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可重用MFC类收集整理(保持更新)</title><link>http://www.cppblog.com/smagle/archive/2010/01/07/105062.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Thu, 07 Jan 2010 02:15:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2010/01/07/105062.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/105062.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2010/01/07/105062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/105062.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/105062.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 个人收集的一些MFC可重用类&nbsp;&nbsp;<a href='http://www.cppblog.com/smagle/archive/2010/01/07/105062.html'>阅读全文</a><img src ="http://www.cppblog.com/smagle/aggbug/105062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2010-01-07 10:15 <a href="http://www.cppblog.com/smagle/archive/2010/01/07/105062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RegCreateKeyEx的一个缺陷</title><link>http://www.cppblog.com/smagle/archive/2009/11/02/99984.html</link><dc:creator>乱78糟</dc:creator><author>乱78糟</author><pubDate>Mon, 02 Nov 2009 07:43:00 GMT</pubDate><guid>http://www.cppblog.com/smagle/archive/2009/11/02/99984.html</guid><wfw:comment>http://www.cppblog.com/smagle/comments/99984.html</wfw:comment><comments>http://www.cppblog.com/smagle/archive/2009/11/02/99984.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/smagle/comments/commentRss/99984.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/smagle/services/trackbacks/99984.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 错误使用CRegKey的Create函数，造成无法删除的注册表垃圾，进而思考发现RegCreateKeyEx的一个缺陷。&nbsp;&nbsp;<a href='http://www.cppblog.com/smagle/archive/2009/11/02/99984.html'>阅读全文</a><img src ="http://www.cppblog.com/smagle/aggbug/99984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/smagle/" target="_blank">乱78糟</a> 2009-11-02 15:43 <a href="http://www.cppblog.com/smagle/archive/2009/11/02/99984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>