﻿<?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/C++语言</title><link>http://www.cppblog.com/Tim/category/16362.html</link><description>&lt;center&gt;&lt;font  id="wd" style="color:red;font-weight:bold;"&gt;让内心永远燃烧着伟大的光明的精神之火！&lt;/font&gt;&lt;/center&gt;
&lt;center&gt;&lt;font  style="color:green"&gt;灵活的思考，严谨的实现&lt;/font&gt;&lt;/center&gt;
&lt;center&gt;&lt;font  style="color:red"&gt;豪迈的气魄、顽强的意志和周密的理性。&lt;/font&gt;&lt;/center&gt;</description><language>zh-cn</language><lastBuildDate>Sun, 16 Jul 2017 01:50:01 GMT</lastBuildDate><pubDate>Sun, 16 Jul 2017 01:50:01 GMT</pubDate><ttl>60</ttl><item><title>32位编译的程序无法使用大于2G的内存</title><link>http://www.cppblog.com/Tim/archive/2017/01/26/214639.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 26 Jan 2017 09:18:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2017/01/26/214639.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/214639.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2017/01/26/214639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/214639.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/214639.html</trackback:ping><description><![CDATA[<div>VS用32位编译的程序，无法使用大于2G的内存。当动态申请（new/malloc）或者栈空间使用需要大于2G时，程序就会产生异常。该异常能被try-catch捕获，但是不一定是bad_alloc类型，只能被catch(...)捕获，所以往往难以定位真实的原因。<br />解决方法是在链接选项中加入 /LARGEADDRESSAWARE 。这样就能使用4G的空间。</div><img src ="http://www.cppblog.com/Tim/aggbug/214639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2017-01-26 17:18 <a href="http://www.cppblog.com/Tim/archive/2017/01/26/214639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GetConsoleWindow </title><link>http://www.cppblog.com/Tim/archive/2015/01/09/209447.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 09 Jan 2015 02:36:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2015/01/09/209447.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/209447.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2015/01/09/209447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/209447.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/209447.html</trackback:ping><description><![CDATA[<p>在控制台程序中，要得到当前程序的句柄，最好的方法是调用GetConsoleWindow 。<br />然而，在代码中却无法直接调用GetConsoleWindow,因为GetConsoleWindow 是 Kernel32.dll 中部分未公布的API。<br />在用eXeScope导出 Kernel32.dll 中控制台相关的API之后，可以发现有一个名为GetConsoleWindow的API。查找参考了部分资料后，提供如下代码，能够动态载入这个API并获 得窗口句柄。</p>
<p>首先需要全局声明：</p>
<p>typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();<br />PROCGETCONSOLEWINDOW GetConsoleWindow;</p>
<p>然后再Main()函数开头中输入以下内容：</p>
<p>HMODULE hKernel32 = GetModuleHandle("kernel32");<br />GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");</p>
<p>完成了动态载入API函数GetConsoleWindow的任务。需要使用时可如下：</p>
<p>HWND cmd = GetConsoleWindow();</p><img src ="http://www.cppblog.com/Tim/aggbug/209447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2015-01-09 10:36 <a href="http://www.cppblog.com/Tim/archive/2015/01/09/209447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fputs不自动添加换行符</title><link>http://www.cppblog.com/Tim/archive/2014/12/02/209002.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Tue, 02 Dec 2014 03:41:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2014/12/02/209002.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/209002.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2014/12/02/209002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/209002.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/209002.html</trackback:ping><description><![CDATA[fgets读取文件时一次读取一行，循环调用时<span style="color: red">不需要处理 换行符；</span><br />但是fputs写文件时一次写入一行，但是<span style="color: red">不会自动添加 换行符。</span><br />然而，puts会<span style="color: red">自动</span>添加换行符。 <br /><br /><span style="color: red"><strong>请注意puts和fputs的这种不一致性！</strong></span><img src ="http://www.cppblog.com/Tim/aggbug/209002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2014-12-02 11:41 <a href="http://www.cppblog.com/Tim/archive/2014/12/02/209002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>system、WinExec、ShellExecute、CreateProcess</title><link>http://www.cppblog.com/Tim/archive/2014/05/12/206913.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Mon, 12 May 2014 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2014/05/12/206913.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/206913.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2014/05/12/206913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/206913.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/206913.html</trackback:ping><description><![CDATA[<p><br />转自<a href="http://www.cnblogs.com/project/archive/2009/10/22/1588015.html">http://www.cnblogs.com/project/archive/2009/10/22/1588015.html</a><br /></p>
<div style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">关于三个SDK函数: WinExec， ShellExecute，CreateProcess 的其他注意事项：<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />【1】定义头文件<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />必须定义以下头文件：<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />#include &lt;windows.h&gt;<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />【2】定义路径<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />C++中所表示的路径要用 " \\ "而不是平常所用的" \ "，所以以上三个函数表示路径都为:disk:\\Directory\\...\\File name<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED);<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);</div>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><strong style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">一、system</strong><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">int system( const char *command );</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; 你可以传入一命令，启动某个程序。如"ping www.vccode.com", "YourExe"等等。不过这里有几点要值得注意：<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (1)、他不会立即返回，直到你启动的程序执行完成。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (2)、如果你启动是windows程序，它仍然会启动一个控制台，这就给人感觉太差劲了，但如果本身是控制台的，而且又需要等待它的完成，那这将是比较好的选择。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (3)、它的返回值代表是否执行成功以及程序的退出码。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (4)、不能运行*.txt文件或"www.baidu.com"</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><strong style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">二、WinExec</strong><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp; UINT WinExec(</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCSTR&nbsp; lpCmdLine,&nbsp;&nbsp; //命令行</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UINT&nbsp; uCmdShow &nbsp; &nbsp;&nbsp; //窗口样式</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp; );</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; 这个API与API:system同样的使用简单，同用是使用命令行型式。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; 不过它与API:system相比，有几个优点：<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (1)、它将启动了一个新进程，并且立即返回，因此你的程序无需等待。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (2)、它的多了一个参数：uCmdShow，通过它你可以一定程度上控件窗体的显示，比如让它后台运行而不显示出来。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (3)、它无论启动控制台程序还是windows程序都只做你想要做的事。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; 不足之处：<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (1)、它完全与本进程脱离，无法做些必要的控制。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (2)、无法得知启动的程序是否退出。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (3)、得不到启动的程序的退出码。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; (4)、不能运行*.txt文件或"www.baidu.com"<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><strong style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">三、ShellExecute</strong><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp; HINSTANCE ShellExecute(</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HWND hwnd,</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCTSTR</span>&nbsp; lpOperation,<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /></p>
<p><span style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(255,102,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCTSTR lpFile,</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><span style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(255,102,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCTSTR lpParameters,</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><span style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(255,102,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCTSTR lpDirectory,</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><span style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(255,102,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT nShowCmd</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><span style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(255,102,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp; );</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><span style="text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; display: inline !important; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; float: none; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp; 它也有WinExec同样的缺点。</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><span style="text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; display: inline !important; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; float: none; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp; 它虽然传回一个HINSTANCE，但他并不是真正的句柄，我们仅能拿它来做一些错误值检查。</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><span style="text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; display: inline !important; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; float: none; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp; 但它的功能比前两者更强大，它执行系统的Shell命令。</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><span style="text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; display: inline !important; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; float: none; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp; 1、2中如果传入&#8220;XX.txt&#8221;，它们将不能成功执行，ShellExecute却能很好地执行，它将启动一个默认的文字处理程序来打开它。</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><span style="text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; display: inline !important; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; float: none; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp; 1、2中如果传入&#8220;www.vccode.com&#8221;，将不能成功执行，而ShellExecute却能很好地执行，它将启动一个默认浏览器来打开这个网站。</span><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /><br style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px" /></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px verdana, Arial, Helvetica, sans-serif; white-space: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><strong style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">四、CreateProcess</strong><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp; BOOL CreateProcess(</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCTSTR lpApplicationName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // name of executable module</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPTSTR lpCommandLine, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // command line string</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL bInheritHandles,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // handle inheritance option</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD dwCreationFlags,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // creation flags</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPVOID lpEnvironment, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; // new environment block</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCTSTR lpCurrentDirectory,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // current directory name</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPSTARTUPINFO lpStartupInfo, &nbsp; // startup information</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPPROCESS_INFORMATION lpProcessInformation // process information</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><span style="padding-bottom: 0px; line-height: 1.8; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(255,102,0); padding-top: 0px">&nbsp;&nbsp;&nbsp; );</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; 往往看到这个函数就让人生畏，它参数多，而且参数类型也如此陌生。是的，正是因为如此它才功能强大！<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; 但不要怕，作为一般使用，非常简单！下面便是一个简单的例子(启动记事本)：<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; STARTUPINFO StartInfo;<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; PROCESS_INFORMATION pinfo;<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; //对程序的启动信息不作任何设定，全部清0<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; memset(&amp;StartInfo,0,sizeof(STARTUPINFO));<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; StartInfo.cb = sizeof(STARTUPINFO);//设定结构的大小<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; BOOL ret=CreateProcess(<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, //启动程序路径名<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "notepad.exe", &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; //参数（当exeName为NULL时，可将命令放入参数前）<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用默认进程安全属性<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用默认线程安全属性<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FALSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //句柄不继承<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NORMAL_PRIORITY_CLASS, //使用正常优先级<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, //使用父进程的环境变量<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, //指定工作目录<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;StartInfo, //子进程主窗口如何显示<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;pinfo); //用于存放新进程的返回信息<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />　　这样在创建成功这后我们就可以从pinfo中找到它的：进程句柄，线程句柄，进程ID，线程ID<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />　　在附件源码中演示了进程序的启动，停止。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />　　实际上我们可以通过很多方式如内存共享、父进程窗体句体传入仍后从消息中获得子进程窗体句柄等，来实现更多的控制。<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />　　想很好地掌握CreateProcess，可参见人民邮电出版社出版的&lt;&lt; Windows系统编程 &gt;&gt;，它的&#8220;进程&#8221;部份作了很详尽的说明。 &nbsp;<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" /><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />例程：<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />#include&lt;windows.h&gt;<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />void main()<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />{<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; HWND handle;<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("Function &lt;WinExec&gt;:\nIt can run a cmd command,but can`t open *.txt and \"www.*.*\"\n");<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("Please press Enter go on\n");<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; getchar();<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; WinExec("mspaint.exe",SW_SHOWNOACTIVATE);<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; /*winexec不能打开网站或txt文件*/<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("Function &lt;ShellExecute&gt;:\nIt can run a cmd command to open file or web\n\n");<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; getchar();<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("Open a txt file\n");<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; ShellExecute(NULL,"open","C:\\test.txt",NULL,NULL,SW_MINIMIZE);<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; getchar();<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("Open a web\n");<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; ShellExecute(NULL,NULL,"www.baidu.com",NULL,NULL,SW_SHOWNA);<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; getchar();<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("Run a cmd command:ping www.sina.com\n");<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; ShellExecute(NULL, NULL, "ping", "sina.com", NULL, SW_SHOWNORMAL);<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; getchar();<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("打开目录\n");<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; ShellExecute(NULL, "open", "c:", NULL, NULL, SW_SHOWNORMAL);<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; getchar();<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("浏览目录\n");<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; ShellExecute(NULL, "explore", "c:", NULL, NULL, SW_SHOWNORMAL);<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; getchar();<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("文件属性\n");<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; ShellExecute(handle,"properties","C:\\test.txt",NULL,NULL,SW_MINIMIZE);<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; printf("%s",handle);<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />&nbsp;&nbsp;&nbsp; /*shellExecute的第二个参数为你想执行的操作(edit,explore,find,open,print,properties),也可为NULL*/<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />}<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />/*<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_HIDE&nbsp;&nbsp;&nbsp; Hides the window and passes activation to another window.<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_MINIMIZE&nbsp;&nbsp; Minimizes the specified window and activates the top-level window in the system's list.<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_RESTORE&nbsp;&nbsp; Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position (same as SW_SHOWNORMAL).<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_SHOW&nbsp;&nbsp;&nbsp; Activates a window and displays it in its current size and position.<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_SHOWMAXIMIZED Activates a window and displays it as a maximized window.<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_SHOWMINIMIZED Activates a window and displays it as an icon.<span class="Apple-converted-space">&nbsp;</span><br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_SHOWMINNOACTIVE Displays a window as an icon. The window that is currently active remains active.<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_SHOWNA&nbsp;&nbsp; Displays a window in its current state. The window that is currently active remains active.<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_SHOWNOACTIVATE Displays a window in its most recent size and position. The window that is currently active remains active.<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />SW_SHOWNORMAL&nbsp;&nbsp; Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position (same as SW_RESTORE).<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />*/</p><img src ="http://www.cppblog.com/Tim/aggbug/206913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2014-05-12 11:35 <a href="http://www.cppblog.com/Tim/archive/2014/05/12/206913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>libevent使用中要注意的问题</title><link>http://www.cppblog.com/Tim/archive/2014/04/17/206622.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 17 Apr 2014 09:35:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2014/04/17/206622.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/206622.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2014/04/17/206622.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/206622.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/206622.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;项目中用到了libevent，我主要用他来管理网络连接对象的读写事件、定时器事件。<br />&nbsp;&nbsp;&nbsp;有了libevent，对这类异步处理，确实增加了许多方便性，只需要在调用event_set时传入自己的回调函数，自己就只需要安心睡大觉了（有事情时他会叫你的）。<br />&nbsp;&nbsp;&nbsp;可是，在后来项目复杂后，几次发现项目陷入无响应状态，也就是不崩溃，不报错，不退出，但是也不响应事情！<br />&nbsp;&nbsp;&nbsp;这真是个令人抓狂的事情！要知道：在基本上所有的代码都在我严密的TRY-CATCH天罗地网之下，但是这个罪魁祸首却依然逍遥法外，还找不到丝毫蛛丝马迹！<img border="0" src="http://www.cppblog.com/Emoticons/QQ/12.gif" width="20" height="20"  alt="" /><br />&nbsp;&nbsp;&nbsp;经过仔细的研究，终于发现端倪：程序陷入进了libevent的loop之中！<br />&nbsp;&nbsp;&nbsp;为什么会这样了？<br />&nbsp;&nbsp;&nbsp;后来发现至少两种情况导致了这个问题：<br />&nbsp;&nbsp;&nbsp;1、某个网络连接对象已经正常或者异常close了，但是没有调用event_del删除这个对象，他还在libevent的链中轮询；<br />&nbsp;&nbsp;&nbsp;2、因为libevent可以重复注册event，所以在某种逻辑下，不小心多次注册了某个event或者定时器后，libevent也可能会僵死。<br /><br />&nbsp;&nbsp;&nbsp;另外，当时我希望能查看出错以后的libevent内部情况，所以使用了他的event_base_dump_events函数，很可惜，这个dump能提供给我的实在是少得可怜而且简单得基本没有价值的信息。这个事实实在是让我感到很遗憾。<img src ="http://www.cppblog.com/Tim/aggbug/206622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2014-04-17 17:35 <a href="http://www.cppblog.com/Tim/archive/2014/04/17/206622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Studio查找中文的正则表达式</title><link>http://www.cppblog.com/Tim/archive/2013/01/24/197539.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 24 Jan 2013 08:32:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2013/01/24/197539.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/197539.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2013/01/24/197539.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/197539.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/197539.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;经常有这样的需求：项目代码中有一些输出信息是中文写的，不过现在要做国际化，代码""中写的中文都要改成英文。这样就需要将代码中包含中文的字符串都找出来。也就是如同 "写到引号中的中文，Yes,is here"。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用什么办法能迅速找出这些包含中文的句子呢？今天终于写了这样一个正则表达式，很好用。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(".*[\u4E00-\u9FA5]+)|([\u4E00-\u9FA5]+.*")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;直接在VS中用Ctrl+F或者Ctrl+Shift+F，在"查找内容"中输入(".*[\u4E00-\u9FA5]+)|([\u4E00-\u9FA5]+.*")，就能找出所有这些中文字符串了！<img border="0" src="http://www.cppblog.com/Emoticons/QQ/lol.gif" width="20" height="20"  alt="" /><img src ="http://www.cppblog.com/Tim/aggbug/197539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2013-01-24 16:32 <a href="http://www.cppblog.com/Tim/archive/2013/01/24/197539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>非类型模板形参取数组的维数</title><link>http://www.cppblog.com/Tim/archive/2012/11/09/194965.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 09 Nov 2012 03:41:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/11/09/194965.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/194965.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/11/09/194965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/194965.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/194965.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如果希望用非类型模板形参的方式取数组的维数时，请记住用数组引用的方式作为形参！&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/11/09/194965.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/194965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-11-09 11:41 <a href="http://www.cppblog.com/Tim/archive/2012/11/09/194965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>A*算法实现</title><link>http://www.cppblog.com/Tim/archive/2012/11/05/194537.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Mon, 05 Nov 2012 01:04:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/11/05/194537.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/194537.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/11/05/194537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/194537.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/194537.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近实现了一下A*算法，感觉蛮好的，尤其是修改地图然后看电脑正确寻路后的那种成就感，有点像小时候蹲在地上，看着一堆蚂蚁搬家，然后故意在他们的路上设置障碍物，然后看蚂蚁不停的探索，然后重新找到新的路线的感觉，真是很有意思。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/11/05/194537.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/194537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-11-05 09:04 <a href="http://www.cppblog.com/Tim/archive/2012/11/05/194537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>链表逆序的循环实现和递归实现</title><link>http://www.cppblog.com/Tim/archive/2012/11/05/194535.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Mon, 05 Nov 2012 00:44:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/11/05/194535.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/194535.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/11/05/194535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/194535.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/194535.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:  链表逆序是笔试中链表测试的经典题，这次自己写了一下代码，分别用循环和递归方法做两种实现，记录在此。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/11/05/194535.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/194535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-11-05 08:44 <a href="http://www.cppblog.com/Tim/archive/2012/11/05/194535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dll的概念、dll导出类（转） </title><link>http://www.cppblog.com/Tim/archive/2012/05/09/174100.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Wed, 09 May 2012 06:34:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/05/09/174100.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/174100.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/05/09/174100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/174100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/174100.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 动态链接库DLL&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/05/09/174100.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/174100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-05-09 14:34 <a href="http://www.cppblog.com/Tim/archive/2012/05/09/174100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hash函数——djb2、sdbm、lose lose</title><link>http://www.cppblog.com/Tim/archive/2012/04/26/172789.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 26 Apr 2012 00:52:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/26/172789.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172789.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/26/172789.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172789.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172789.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文内容转自于http://www.cse.yorku.ca/~oz/hash.html。因为他对给出了几个非常好的hash函数，而其中的sdbm就是我们将剖析的eSNACC用的hash的原型。文章是英文的，但是通俗易懂，就摘录在此了。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/04/26/172789.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/172789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-26 08:52 <a href="http://www.cppblog.com/Tim/archive/2012/04/26/172789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sizeof和预处理指令</title><link>http://www.cppblog.com/Tim/archive/2012/04/20/172157.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 20 Apr 2012 09:05:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/04/20/172157.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/172157.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/04/20/172157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/172157.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/172157.html</trackback:ping><description><![CDATA[<p>我们知道，sizeof是在编译期就完成了计算，在运行时已经是一个常数值了。那sizeof能用在类似于#if这样的指令中吗？</p>
<p>答案一般是不行。</p>
<p>&nbsp;</p>
<p>关于预编译条件MSDN明确写着： The expression cannot use sizeof or a type-cast operator. <br /></p>
<p>其实，像#include,#if,#define等等这样的是在预处理过程就完成了包含和替换，所以他们是预处理指令。而此时还没有到编译期，还没有类型名称分析，sizeof也就不能用。</p>
<p>&nbsp;</p>
<p>编译期完成的工作除了sizeof以外，我们还关注的就是模板的具现等。</p><img src ="http://www.cppblog.com/Tim/aggbug/172157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-04-20 17:05 <a href="http://www.cppblog.com/Tim/archive/2012/04/20/172157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序设计语言层次结构</title><link>http://www.cppblog.com/Tim/archive/2012/03/30/169542.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 30 Mar 2012 08:47:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2012/03/30/169542.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/169542.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2012/03/30/169542.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/169542.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/169542.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 程序设计语言层次结构 C、C++、Java&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2012/03/30/169542.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/169542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2012-03-30 16:47 <a href="http://www.cppblog.com/Tim/archive/2012/03/30/169542.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用memcpy替代strcpy/strncpy</title><link>http://www.cppblog.com/Tim/archive/2011/04/02/143259.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Sat, 02 Apr 2011 04:42:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2011/04/02/143259.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/143259.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2011/04/02/143259.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/143259.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/143259.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 倡导用memcpy替代strcpy/strncpy！因为memcpy函数不仅功能上比strcpy/strncpy更强大，关键在于前者效率要高很多！&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2011/04/02/143259.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/143259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2011-04-02 12:42 <a href="http://www.cppblog.com/Tim/archive/2011/04/02/143259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不对称边界编码风格</title><link>http://www.cppblog.com/Tim/archive/2011/03/31/143130.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 31 Mar 2011 09:07:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2011/03/31/143130.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/143130.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2011/03/31/143130.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/143130.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/143130.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本篇目的不仅仅是引出这个编码技巧：“用第一个入界点和第一个出界点来表示一个数值范围！”，其实我希望表达的是：在C/C++语言中，写类似for这些涉及边界值的语句时，统一采用不对称边界编码风格！&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2011/03/31/143130.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/143130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2011-03-31 17:07 <a href="http://www.cppblog.com/Tim/archive/2011/03/31/143130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言嵌套注释</title><link>http://www.cppblog.com/Tim/archive/2011/03/25/142726.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 25 Mar 2011 09:18:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2011/03/25/142726.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/142726.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2011/03/25/142726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/142726.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/142726.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 判断C编译器是否允许嵌套注释&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2011/03/25/142726.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/142726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2011-03-25 17:18 <a href="http://www.cppblog.com/Tim/archive/2011/03/25/142726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单就是美</title><link>http://www.cppblog.com/Tim/archive/2011/03/25/142706.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 25 Mar 2011 06:10:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2011/03/25/142706.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/142706.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2011/03/25/142706.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/142706.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/142706.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们在分析设计一个方案时，是要面面俱到，使其从功能到展现，从需求到扩展，等方方面面万能吗？ </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;即使不考虑是否存在这样一个方案，也不考虑这个最终方案实现所需的成本，单就算是弄出来了，我们会不会最终发现这已经背离了我们需求的初衷，这不是我们需要的？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是的。这是不需要的，也是不现实的，更是不必要的！ </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;《C陷阱与缺陷》中第0章有一个很有意思的习题，刚开始我还不理解此题的用意，至少觉得放在这样一本技术书籍中是多少有些&#8220;莫名其妙&#8221;的，但是后来发现这是对的。作者作为一个资深的技术专家，用自己几十年的经验研究了程序设计中的方方面面，在分享自己的经验时，在最前面就用此题来告诉后人一个意识形态的东西，而且很明显他认为这在程序设计中也是需要首要考虑的。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个题目是这样的：&#8220;在烹饪时你是否失手用菜刀切伤过自己的手？怎样改进菜刀使得使用更安全？你是否愿意使用这样一把经过改良的菜刀？&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对以上这个题目，聪明的您是如何考虑的呢？好好想一下，下面我就给出作者的真知灼见了哦~ </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Answer：&#8220;我们很容易想到让一个工具更安全，代价是原来简单的工具现在要变得复杂一些。食品加工机一般有连锁装置，保护使用者不让手指受伤。但是菜刀却不同，给这样一个简单、灵活的工具附加保护手指避免受伤的装置，只能让它失去简单灵活的特点。实际上，这样做最后得到的更像一台食品加工机，而不是一把菜刀。&#8221; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好了，经典名言诞生了：&#8220;使其难于做&#8216;傻事&#8217;常常会使其难于做&#8216;聪明事&#8217;，正所谓&#8216;弄巧成拙&#8217;。&#8221;！ </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不愧是C语言的大师！我想C语言的哲学应该也就是这样。C语言经历这么多年，其初始的设计思想始终如一：程序员了解他们在做什么，惟一的要求是程序员要明确地表达他们的意图。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是放之四海皆准的哲学：简单就是美！ </p><img src ="http://www.cppblog.com/Tim/aggbug/142706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2011-03-25 14:10 <a href="http://www.cppblog.com/Tim/archive/2011/03/25/142706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>结构体变量初始化</title><link>http://www.cppblog.com/Tim/archive/2010/06/12/117710.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Sat, 12 Jun 2010 08:19:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2010/06/12/117710.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/117710.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2010/06/12/117710.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/117710.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/117710.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在初始化结构体变量时候，既可以初始化其全部成员变量，也可以仅仅对其中部分的成员变量进行初始化。<br>仅仅对其中部分的成员变量进行初始化，要求初始化的数据至少有一个，其他没有初始化的成员变量由系统完成初始化，为其提供缺省的初始化值。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2010/06/12/117710.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/117710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2010-06-12 16:19 <a href="http://www.cppblog.com/Tim/archive/2010/06/12/117710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】stdafx.h的作用</title><link>http://www.cppblog.com/Tim/archive/2009/12/17/103416.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 17 Dec 2009 10:05:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2009/12/17/103416.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/103416.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2009/12/17/103416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/103416.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/103416.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 预编译头的作用&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2009/12/17/103416.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/103416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2009-12-17 18:05 <a href="http://www.cppblog.com/Tim/archive/2009/12/17/103416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于C++虚函数的研究</title><link>http://www.cppblog.com/Tim/archive/2007/11/25/37292.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Sun, 25 Nov 2007 14:32:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2007/11/25/37292.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/37292.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2007/11/25/37292.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/37292.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/37292.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:       以前早稍有接触C++中虚函数多态在编译器上的实现问题，但总没有利用程序来检查实验。这次终于对虚函数和他的vtable表有更深入的关注，通过继承类大小的检测和反汇编后的代码能查出端倪。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2007/11/25/37292.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/37292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2007-11-25 22:32 <a href="http://www.cppblog.com/Tim/archive/2007/11/25/37292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>华为2008校园招聘北京笔试最后编程题</title><link>http://www.cppblog.com/Tim/archive/2007/11/24/37244.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Sat, 24 Nov 2007 07:02:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2007/11/24/37244.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/37244.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2007/11/24/37244.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/37244.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/37244.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 华为2008校园招聘北京笔试最后编程题答案&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2007/11/24/37244.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/37244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2007-11-24 15:02 <a href="http://www.cppblog.com/Tim/archive/2007/11/24/37244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】C++中的function object  </title><link>http://www.cppblog.com/Tim/archive/2007/10/15/34250.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Mon, 15 Oct 2007 02:36:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2007/10/15/34250.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/34250.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2007/10/15/34250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/34250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/34250.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: function object   STL&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2007/10/15/34250.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/34250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2007-10-15 10:36 <a href="http://www.cppblog.com/Tim/archive/2007/10/15/34250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】VC编程规范—程序员应该这样写代码</title><link>http://www.cppblog.com/Tim/archive/2007/09/29/33218.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Sat, 29 Sep 2007 11:08:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2007/09/29/33218.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/33218.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2007/09/29/33218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/33218.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/33218.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2007/09/29/33218.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/33218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2007-09-29 19:08 <a href="http://www.cppblog.com/Tim/archive/2007/09/29/33218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STL问题系列一</title><link>http://www.cppblog.com/Tim/archive/2007/09/13/32129.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Thu, 13 Sep 2007 06:36:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2007/09/13/32129.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/32129.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2007/09/13/32129.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/32129.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/32129.html</trackback:ping><description><![CDATA[<p>一直在学习STL，用的书籍是王昕译的《C++ STL 中文版》，学习中产生很多问题，特在这向各位高手请教，以下问题基本是按教材章节顺序给出的，如果您手中也刚好有这样一本书，那就太好了，这样就不会因为我理解的肤浅而让您不明白题意，总之，请各位高手不吝赐教：<br>STL问题系列一<br>1、《C++STL 中文版》第一章课后习题：1-4、解释为什么在所写算法中使用其他种类的迭代器，而不是随机存取迭代器？1-5、解释为什么宁愿定义一个仅能通过迭代器来存取的数据结构，而不是让他可以被随机存取呢？</p>
<p>2、《C++STL 中文版》迭代器部分一直介绍输入、输去、前向、双向、随机迭代器，然而我以为只要以&lt;iterator&gt;建立的对象就具有随机迭代器的功能，为何讨论前向、双向呢？</p>
<p>3、从《C++STL 中文版》第一章后面的习题看前向、双向、随机迭代器从性质和条件上有较大差别，请问这在深层上如何理解呢？</p>
<p>4、《C++STL 中文版》第二章习题：2-3&#8220;当T和U中有一个是const类型时，我们可能需要经常构造一个pair&lt;T,U&gt;对象。下面的定义是否可以达到这样的效果？如果不可以，请说出你的理由。<br>template&lt;class T,class U&gt;inline pair&lt;T,U&gt; make_pair(T&amp; x,U&amp; y)<br>{return&nbsp; (pair&lt;T,U&gt; (x,y));}&#8221;</p>
<p>5、《C++STL 中文版》2-4&#8220;请描述出一种可能的编码情况，使得表达式 x.first &lt; y.first ||<br>!(y.first &lt; x.first)&nbsp; &amp;&amp; x.second &lt; y.second 并不等同于 x.first &lt; y.first || x.first == y.first&nbsp; &amp;&amp; x.second &lt; y.second。&#8221;</p>
<p>6、STL在他的文件中定义了指针和引用，但同时还总是定义常指针和常引用，为何两者必须分开实现呢？</p>
<p>7、《C++STL 中文版》第四章：4-6&#8220;写出一个分配器，它将对象存储在一个磁盘文件中，并且维护一个小小的高速缓存来存储程序内存中的有效对象。&#8221;</p>
<p>8、《C++STL 中文版》第四章：4-7&#8220;在那种情况下，分配器应该以与模板类allocator不一致的方式来定义成员函数construct和destroy？&#8221;</p>
<p>9、&lt;algorithm&gt;文件中sort_heap函数功能：void&nbsp; sort_heap(RanIt&nbsp; first, RanIt&nbsp; last)重排由区间[first,last)中的迭代器指定的序列，产生一个按 operator &lt;排序的序列。但是最初的序列也必须是一个同样按 operator &lt; 排序的堆。这样看，那该函数的实际意义呢？</p>
<img src ="http://www.cppblog.com/Tim/aggbug/32129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2007-09-13 14:36 <a href="http://www.cppblog.com/Tim/archive/2007/09/13/32129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual C++/MFC入门教程</title><link>http://www.cppblog.com/Tim/archive/2007/04/15/21923.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Sun, 15 Apr 2007 02:38:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2007/04/15/21923.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/21923.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2007/04/15/21923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/21923.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/21923.html</trackback:ping><description><![CDATA[提供比较完整的教程，由于文章太长，请阅读文章《<a id=1020 title="Visual C++/MFC入门教程" style="COLOR: #ff0000" href="http://www.cppblog.com/Tim/articles/21924.html">Visual C++/MFC入门教程</a>》。 
<img src ="http://www.cppblog.com/Tim/aggbug/21923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2007-04-15 10:38 <a href="http://www.cppblog.com/Tim/archive/2007/04/15/21923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>