﻿<?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++博客-adai123</title><link>http://www.cppblog.com/adai123/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 19:05:26 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 19:05:26 GMT</pubDate><ttl>60</ttl><item><title>编程之美-编程判断两个链表是否相交</title><link>http://www.cppblog.com/adai123/archive/2009/03/23/77580.html</link><dc:creator>阿呆</dc:creator><author>阿呆</author><pubDate>Mon, 23 Mar 2009 08:21:00 GMT</pubDate><guid>http://www.cppblog.com/adai123/archive/2009/03/23/77580.html</guid><wfw:comment>http://www.cppblog.com/adai123/comments/77580.html</wfw:comment><comments>http://www.cppblog.com/adai123/archive/2009/03/23/77580.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/adai123/comments/commentRss/77580.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adai123/services/trackbacks/77580.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/adai123/archive/2009/03/23/77580.html'>阅读全文</a><img src ="http://www.cppblog.com/adai123/aggbug/77580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adai123/" target="_blank">阿呆</a> 2009-03-23 16:21 <a href="http://www.cppblog.com/adai123/archive/2009/03/23/77580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>八皇后问题的一种求法</title><link>http://www.cppblog.com/adai123/archive/2008/11/20/65247.html</link><dc:creator>阿呆</dc:creator><author>阿呆</author><pubDate>Thu, 20 Nov 2008 13:54:00 GMT</pubDate><guid>http://www.cppblog.com/adai123/archive/2008/11/20/65247.html</guid><wfw:comment>http://www.cppblog.com/adai123/comments/65247.html</wfw:comment><comments>http://www.cppblog.com/adai123/archive/2008/11/20/65247.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adai123/comments/commentRss/65247.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adai123/services/trackbacks/65247.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 利用回溯法找出一组八皇后的排放位置。&nbsp;&nbsp;<a href='http://www.cppblog.com/adai123/archive/2008/11/20/65247.html'>阅读全文</a><img src ="http://www.cppblog.com/adai123/aggbug/65247.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adai123/" target="_blank">阿呆</a> 2008-11-20 21:54 <a href="http://www.cppblog.com/adai123/archive/2008/11/20/65247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法题_以后慢慢做</title><link>http://www.cppblog.com/adai123/archive/2008/11/04/65976.html</link><dc:creator>阿呆</dc:creator><author>阿呆</author><pubDate>Tue, 04 Nov 2008 14:40:00 GMT</pubDate><guid>http://www.cppblog.com/adai123/archive/2008/11/04/65976.html</guid><wfw:comment>http://www.cppblog.com/adai123/comments/65976.html</wfw:comment><comments>http://www.cppblog.com/adai123/archive/2008/11/04/65976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adai123/comments/commentRss/65976.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adai123/services/trackbacks/65976.html</trackback:ping><description><![CDATA[<p><br>递归与分治一章：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给定一个由n个互不相同的数组成的集合S，及一个正整数k&lt;=n，试设计<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个O(n)时间算法找出S中最接近S的中位数的k个数</p>
<p>动态规划一章：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设有n种不同面值的硬币，各硬币的面值存于数组T[1:n]中。现要用这些<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 面值的硬币来找钱。可以使用的各种面值的硬币个数不限。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）当只用硬币面值T[1],T[2],&#8230;&#8230;T[i]时，可找出钱数j的最少硬币个数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 记为C(i,j)。若只用这些硬币面值，找不出钱数j时，记C(i,j)=无穷。给<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 出C(i,j)的递归表达式，及其初始条件。1&lt;=i&lt;=n,1&lt;=j&lt;=L</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）设计一个动态规划算法，对1&lt;=j&lt;=L，计算出所有的C(n,j)。算法中只<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许使用一个长度为L的数组。用L和n作为变量来表示算法的计算时间复杂<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 性。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3）在C(n,j)，1&lt;=j&lt;=L，已计算出的情况下，设计一个贪心算法，对任意<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 钱数m&lt;=L,给出用最少硬币找钱m的方法。当C(n,m)不等于无穷时，算法的<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计算时间应为O(n+C(n,m))。</p>
<p>贪心算法一章：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在黑板上写了n个正数组成的一个数列，进行如下操作：每一次擦去其中两<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 个数设为a和b,然后在数列中加入一个数a*b+1，如此下去直至黑板上只剩<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下一个数。在所有按这种操作方式最后得到的数中，最大的数记为max,最<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小的数记为min，则该数列的极差M定义为M=max-min。对于给定的数列，设<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计一个有效算法计算出其极差M。并说明算法的正确性。</p>
<p>回溯法一章：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运动员最佳配对问题。一个羽毛球队有男女运动员各n人，给定2个n*n矩阵P<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 和Q。P[i][j]是男运动员i和女运动员j配对组成混合双打时的竞赛优势；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Q[i][j]则是女运动员i和男运动员j配合时的竞赛优势。显然，由于技术的<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配合和心理状态等各种因素的影响，P[i][j]不一定等于Q[i][j]。设计一个<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 算法，计算出男女运动员的最佳配对法，使各组男女双方竞赛优势乘积达到<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大。</p>
<p>分支界限法一章：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 栈式分支界限法将活结点表以后进先出（LIFO）的方式存储于一个栈中。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 试设计一个解0-1背包问题的分支界限法，并说明栈式分支界限法与回溯<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 法的区别。</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 试设计一个解n后问题的优先队列式分支界限法。<br></p>
<img src ="http://www.cppblog.com/adai123/aggbug/65976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adai123/" target="_blank">阿呆</a> 2008-11-04 22:40 <a href="http://www.cppblog.com/adai123/archive/2008/11/04/65976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++入门必做题[]</title><link>http://www.cppblog.com/adai123/archive/2008/11/03/65892.html</link><dc:creator>阿呆</dc:creator><author>阿呆</author><pubDate>Mon, 03 Nov 2008 14:26:00 GMT</pubDate><guid>http://www.cppblog.com/adai123/archive/2008/11/03/65892.html</guid><wfw:comment>http://www.cppblog.com/adai123/comments/65892.html</wfw:comment><comments>http://www.cppblog.com/adai123/archive/2008/11/03/65892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adai123/comments/commentRss/65892.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adai123/services/trackbacks/65892.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/adai123/archive/2008/11/03/65892.html'>阅读全文</a><img src ="http://www.cppblog.com/adai123/aggbug/65892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adai123/" target="_blank">阿呆</a> 2008-11-03 22:26 <a href="http://www.cppblog.com/adai123/archive/2008/11/03/65892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[DSound]CreateSoundBuffer()失败问题</title><link>http://www.cppblog.com/adai123/archive/2008/10/27/64893.html</link><dc:creator>阿呆</dc:creator><author>阿呆</author><pubDate>Mon, 27 Oct 2008 14:41:00 GMT</pubDate><guid>http://www.cppblog.com/adai123/archive/2008/10/27/64893.html</guid><wfw:comment>http://www.cppblog.com/adai123/comments/64893.html</wfw:comment><comments>http://www.cppblog.com/adai123/archive/2008/10/27/64893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adai123/comments/commentRss/64893.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adai123/services/trackbacks/64893.html</trackback:ping><description><![CDATA[<p>&nbsp;以下代码，在XP上，CreateSoundBuffer失败，返回E_INVALIDARG，即参数设置错误。<br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;pcmwf.wFormatTag&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;WAVE_FORMAT_PCM;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;pcmwf.nChannels&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;pcmwf.nSamplesPerSec&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">48000</span><span style="COLOR: #000000">;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;pcmwf.wBitsPerSample&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">24</span><span style="COLOR: #000000">;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;pcmwf.nBlockAlign&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;pcmwf.nChannels&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pcmwf.wBitsPerSample&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;pcmwf.nAvgBytesPerSec&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;pcmwf.nSamplesPerSec&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;pcmwf.nBlockAlign;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;dsbd.dwSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(DSBUFFERDESC);&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;dsbd.dwFlags&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;DSBCAPS_CTRLPAN&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;DSBCAPS_CTRLVOLUME&nbsp;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;DSBCAPS_GLOBALFOCUS&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;DSBCAPS_CTRLPOSITIONNOTIFY;&nbsp;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;dsbd.dwBufferBytes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">11520</span><span style="COLOR: #000000">;&nbsp;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;dsbd.lpwfxFormat&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pcmwf;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;lpds</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">CreateSoundBuffer(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dsbd,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">tmp_ds_buf,NULL)&nbsp;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>在DirectX的SDK中查看WAVE_FORMAT_PCM可以得到关于wBitsPerSample的说明如下：<br><br>&nbsp;If wFormatTag is WAVE_FORMAT_PCM, then wBitsPerSample should be equal to 8 or 16.<br>If wFormatTag is WAVE_FORMAT_EXTENSIBLE, this value can be any integer multiple of 8. <br><br><span>也就是说，在格式为WAVE_FORMAT_PCM的时候，设置wBitsPerSample为24是不可以的，所以会创建失败。<br>在wBitsPerSample = 24时，需要使用WAVE_FORMAT_EXTENSIBLE格式。<br><br>参考如下文章：</span><br><a href="http://www.eggheadcafe.com/forumarchives/win32programmerdirectxaudio/Nov2005/post24249606.asp">http://www.eggheadcafe.com/forumarchives/win32programmerdirectxaudio/Nov2005/post24249606.asp</a><br><br></p>
<img src ="http://www.cppblog.com/adai123/aggbug/64893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adai123/" target="_blank">阿呆</a> 2008-10-27 22:41 <a href="http://www.cppblog.com/adai123/archive/2008/10/27/64893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用SetMenuItemInfo()来无效化菜单</title><link>http://www.cppblog.com/adai123/archive/2008/10/27/64892.html</link><dc:creator>阿呆</dc:creator><author>阿呆</author><pubDate>Mon, 27 Oct 2008 13:37:00 GMT</pubDate><guid>http://www.cppblog.com/adai123/archive/2008/10/27/64892.html</guid><wfw:comment>http://www.cppblog.com/adai123/comments/64892.html</wfw:comment><comments>http://www.cppblog.com/adai123/archive/2008/10/27/64892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adai123/comments/commentRss/64892.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adai123/services/trackbacks/64892.html</trackback:ping><description><![CDATA[<font face=宋体>一般来说，无效化菜单项可以用EnableMenuItem(ID,enable)来实现。但是，如果某个菜单项下还有subitem，那这个菜单项是没有ID的，这时不能用EnableMenuItem来实现，但可以用SetMenuItemInfo来灰化。<br><br>可以在MainFram类的OnCreate函数中添加以下代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CMenu</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pMainMenu&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetMenu();<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pMainMenu&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;NULL&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;pMainMenu</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetMenuItemCount()&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img id=Codehighlighter1_94_395_Open_Image onclick="this.style.display='none'; Codehighlighter1_94_395_Open_Text.style.display='none'; Codehighlighter1_94_395_Closed_Image.style.display='inline'; Codehighlighter1_94_395_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_94_395_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_94_395_Closed_Text.style.display='none'; Codehighlighter1_94_395_Open_Image.style.display='inline'; Codehighlighter1_94_395_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_94_395_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_94_395_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMenu</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pSubMenu&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pMainMenu</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetSubMenu(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">start&nbsp;from&nbsp;0</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert(pSubMenu);<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MENUITEMINFO&nbsp;MenuItemInfo;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItemInfo.cbSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(MENUITEMINFO);<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItemInfo.fMask&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MIIM_STATE;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItemInfo.fState&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MFS_GRAYED;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSubMenu</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetMenuItemInfo(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">MenuItemInfo,&nbsp;TRUE);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">start&nbsp;from&nbsp;0</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
</font>
<img src ="http://www.cppblog.com/adai123/aggbug/64892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adai123/" target="_blank">阿呆</a> 2008-10-27 21:37 <a href="http://www.cppblog.com/adai123/archive/2008/10/27/64892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows service程序步骤</title><link>http://www.cppblog.com/adai123/archive/2008/07/04/55374.html</link><dc:creator>阿呆</dc:creator><author>阿呆</author><pubDate>Fri, 04 Jul 2008 15:17:00 GMT</pubDate><guid>http://www.cppblog.com/adai123/archive/2008/07/04/55374.html</guid><wfw:comment>http://www.cppblog.com/adai123/comments/55374.html</wfw:comment><comments>http://www.cppblog.com/adai123/archive/2008/07/04/55374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/adai123/comments/commentRss/55374.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/adai123/services/trackbacks/55374.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;一个windows服务程序大体可以三步来写，其大体框架如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TestService.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;for&nbsp;the&nbsp;console&nbsp;application.<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>LPTSTR&nbsp;g_ServiceName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TestService</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;WINAPI&nbsp;ServiceCtrlHandler(DWORD&nbsp;code)<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_206_286_Open_Image onclick="this.style.display='none'; Codehighlighter1_206_286_Open_Text.style.display='none'; Codehighlighter1_206_286_Closed_Image.style.display='inline'; Codehighlighter1_206_286_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_206_286_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_206_286_Closed_Text.style.display='none'; Codehighlighter1_206_286_Open_Image.style.display='inline'; Codehighlighter1_206_286_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_206_286_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_206_286_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">process&nbsp;control&nbsp;requests.<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">比如，当收到SERVICE_CONTROL_STOP请求时，设置server状态为stop</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;MyServiceTestFuncion()<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id=Codehighlighter1_317_354_Open_Image onclick="this.style.display='none'; Codehighlighter1_317_354_Open_Text.style.display='none'; Codehighlighter1_317_354_Closed_Image.style.display='inline'; Codehighlighter1_317_354_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_317_354_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_317_354_Closed_Text.style.display='none'; Codehighlighter1_317_354_Open_Image.style.display='inline'; Codehighlighter1_317_354_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_317_354_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_317_354_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">service功能函数。在这里写我们要service做什么事情</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">服务入口函数,一些初始化动作在此处进行</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;WINAPI&nbsp;ServiceMain()<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_405_606_Open_Image onclick="this.style.display='none'; Codehighlighter1_405_606_Open_Text.style.display='none'; Codehighlighter1_405_606_Closed_Image.style.display='inline'; Codehighlighter1_405_606_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_405_606_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_405_606_Closed_Text.style.display='none'; Codehighlighter1_405_606_Open_Image.style.display='inline'; Codehighlighter1_405_606_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_405_606_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_405_606_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;SERVICE_STATUS_HANDLE&nbsp;hStatus;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;hStatus&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;RegisterServiceCtrlHandler(<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_ServiceName,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">服务名称</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServiceCtrlHandler);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">处理服务控制请求的函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">hStatus)<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id=Codehighlighter1_554_566_Open_Image onclick="this.style.display='none'; Codehighlighter1_554_566_Open_Text.style.display='none'; Codehighlighter1_554_566_Closed_Image.style.display='inline'; Codehighlighter1_554_566_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_554_566_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_554_566_Closed_Text.style.display='none'; Codehighlighter1_554_566_Open_Image.style.display='inline'; Codehighlighter1_554_566_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_554_566_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_554_566_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注册失败</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img id=Codehighlighter1_575_604_Open_Image onclick="this.style.display='none'; Codehighlighter1_575_604_Open_Text.style.display='none'; Codehighlighter1_575_604_Closed_Image.style.display='inline'; Codehighlighter1_575_604_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_575_604_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_575_604_Closed_Text.style.display='none'; Codehighlighter1_575_604_Open_Image.style.display='inline'; Codehighlighter1_575_604_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_575_604_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_575_604_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyServiceTestFuncion();<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">函数入口函数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img id=Codehighlighter1_655_829_Open_Image onclick="this.style.display='none'; Codehighlighter1_655_829_Open_Text.style.display='none'; Codehighlighter1_655_829_Closed_Image.style.display='inline'; Codehighlighter1_655_829_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_655_829_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_655_829_Closed_Text.style.display='none'; Codehighlighter1_655_829_Open_Image.style.display='inline'; Codehighlighter1_655_829_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_655_829_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_655_829_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img id=Codehighlighter1_695_771_Open_Image onclick="this.style.display='none'; Codehighlighter1_695_771_Open_Text.style.display='none'; Codehighlighter1_695_771_Closed_Image.style.display='inline'; Codehighlighter1_695_771_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_695_771_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_695_771_Closed_Text.style.display='none'; Codehighlighter1_695_771_Open_Image.style.display='inline'; Codehighlighter1_695_771_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;SERVICE_TABLE_ENTRY&nbsp;ServiceTable[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_695_771_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_695_771_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img id=Codehighlighter1_699_752_Open_Image onclick="this.style.display='none'; Codehighlighter1_699_752_Open_Text.style.display='none'; Codehighlighter1_699_752_Closed_Image.style.display='inline'; Codehighlighter1_699_752_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_699_752_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_699_752_Closed_Text.style.display='none'; Codehighlighter1_699_752_Open_Image.style.display='inline'; Codehighlighter1_699_752_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_699_752_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_699_752_Open_Text><span style="COLOR: #000000">{g_ServiceName,&nbsp;(LPSERVICE_MAIN_FUNCTIONW)ServiceMain}</span></span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img id=Codehighlighter1_757_768_Open_Image onclick="this.style.display='none'; Codehighlighter1_757_768_Open_Text.style.display='none'; Codehighlighter1_757_768_Closed_Image.style.display='inline'; Codehighlighter1_757_768_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_757_768_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_757_768_Closed_Text.style.display='none'; Codehighlighter1_757_768_Open_Image.style.display='inline'; Codehighlighter1_757_768_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_757_768_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_757_768_Open_Text><span style="COLOR: #000000">{NULL,&nbsp;NULL}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;StartServiceCtrlDispatcher(ServiceTable);<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><br>以下介绍这3个步骤：<br></o:p></span><span lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、在</span><span lang=EN-US>main</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数中调用</span><span lang=EN-US>StartServiceCtrlDispatcher</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数，该函数会启动新线程来执行程序中所要执行的服务。<br></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img id=Codehighlighter1_38_114_Open_Image onclick="this.style.display='none'; Codehighlighter1_38_114_Open_Text.style.display='none'; Codehighlighter1_38_114_Closed_Image.style.display='inline'; Codehighlighter1_38_114_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_38_114_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_114_Closed_Text.style.display='none'; Codehighlighter1_38_114_Open_Image.style.display='inline'; Codehighlighter1_38_114_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;SERVICE_TABLE_ENTRY&nbsp;ServiceTable[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_38_114_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_38_114_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img id=Codehighlighter1_42_95_Open_Image onclick="this.style.display='none'; Codehighlighter1_42_95_Open_Text.style.display='none'; Codehighlighter1_42_95_Closed_Image.style.display='inline'; Codehighlighter1_42_95_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_42_95_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_95_Closed_Text.style.display='none'; Codehighlighter1_42_95_Open_Image.style.display='inline'; Codehighlighter1_42_95_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_42_95_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_42_95_Open_Text><span style="COLOR: #000000">{g_ServiceName,&nbsp;(LPSERVICE_MAIN_FUNCTIONW)ServiceMain}</span></span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img id=Codehighlighter1_100_111_Open_Image onclick="this.style.display='none'; Codehighlighter1_100_111_Open_Text.style.display='none'; Codehighlighter1_100_111_Closed_Image.style.display='inline'; Codehighlighter1_100_111_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_100_111_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_100_111_Closed_Text.style.display='none'; Codehighlighter1_100_111_Open_Image.style.display='inline'; Codehighlighter1_100_111_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_100_111_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_100_111_Open_Text><span style="COLOR: #000000">{NULL,&nbsp;NULL}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;StartServiceCtrlDispatcher(ServiceTable);</span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left>其中，</span><span lang=EN-US>SERVICE_TABLE_ENTRY</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个结构，其中包括两个域：<br></span><span lang=EN-US style="FONT-SIZE: 8.5pt"><span style="mso-field-code: ' HYPERLINK '''"><span class=MsoHyperlink><span style="COLOR: #0040ff; TEXT-DECORATION: none; text-underline: none"><u></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;LPTSTR&nbsp;lpServiceName;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPSERVICE_MAIN_FUNCTION&nbsp;lpServiceProc;</span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><br>lpServiceName</u></span></span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定在</span><span lang=EN-US>service</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进程中运行的服务的名字，它可以是空字符串（</span><span lang=EN-US>"&#8221;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），但不能是</span><span lang=EN-US>NULL</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">我们在程序的开始处指定如下：<span>LPTSTR g_ServiceName = _T(</span>"TestService");</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 8.5pt"><span style="mso-field-code: ' HYPERLINK '''"><span class=MsoHyperlink><span style="COLOR: #0040ff; TEXT-DECORATION: none; text-underline: none"><u>lpServiceProc</u></span></span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指向服务入口函数的指针，即新启动的服务线程的指针。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个服务程序可以启动几个线程，取决于</span><span lang=EN-US>ServiceTable</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中元素的个数。注意，</span><span lang=EN-US>ServiceTable</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的最后一个元素必须是</span><span lang=EN-US>{NULL, NULL}</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，以表示结束。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>StartServiceCtrlDispatcher</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数（其后所用的</span><span lang=EN-US>windowsAPI</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也是）的头文件是</span><span lang=EN-US>Windows.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，因此要包含该头文件</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、定义服务的入口函数</span><span lang=EN-US>ServiceMain</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang=EN-US>ServiceMain</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数中调用</span><span lang=EN-US>RegisterServiceCtrlHandler</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数来注册一个函数处理服务控制请求。函数调用方式如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">RegisterServiceCtrlHandler(&nbsp;<br>&nbsp;g_ServiceName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">服务名称&nbsp;<br>&nbsp;ServiceCtrlHandler);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">处理服务控制请求的函数</span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></span>RegisterServiceCtrlHandler<span> 函数返回一个SERVICE_STATUS_HANDLE</span>类型的handle来表明service的状态，如果是0，则表示注册失败。</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后调用我们的服务最主要的函数实现我们所要实现的功能：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>MyServiceTestFuncion();//</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现该服务要实现的功能</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、实现</span><span lang=EN-US>ServiceCtrlHandler</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>ServiceCtrlHandler</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数的定义如下：</span></p>
<p class=MsoNormal style="BACKGROUND: #dddddd; MARGIN: 7.2pt 0cm; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><strong><span lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">VOID WINAPI</span></strong><span lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><span lang=EN-US>ServiceCtrlHandler</span><strong><span lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> (</span></strong><span lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #dddddd; MARGIN: 7.2pt 0cm; TEXT-ALIGN: left; mso-pagination: widow-orphan; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align=left><span lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp; </span><strong>DWORD</strong> <em><span style="mso-field-code: ' HYPERLINK '''"><span style="COLOR: #0040ff; mso-bidi-font-size: 12.0pt">fdwControl</span></span></em><strong><o:p></o:p></strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US style="FONT-SIZE: 8.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">);<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其中，</span><em><span lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-field-code: ' HYPERLINK '''"><span style="COLOR: #0040ff; mso-bidi-font-size: 12.0pt">fdwControl</span></span></span></em><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span><span lang=EN-US>Control Code</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，监控服务的状态，可以在其中针对服务的各种状态进行动作，比如，当</span><em><span lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-field-code: ' HYPERLINK '''"><span style="COLOR: #0040ff; mso-bidi-font-size: 12.0pt">fdwControl</span></span></span></em><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span><span lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black">SERVICE_CONTROL_STOP</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，停止该服务。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个</span><span lang=EN-US>service</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序实现的大致步骤如上。</span></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/adai123/aggbug/55374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/adai123/" target="_blank">阿呆</a> 2008-07-04 23:17 <a href="http://www.cppblog.com/adai123/archive/2008/07/04/55374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>