﻿<?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++博客-服不服？</title><link>http://www.cppblog.com/waterczh/</link><description>不服就证明给自己看</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 19:22:54 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 19:22:54 GMT</pubDate><ttl>60</ttl><item><title>（转载）闰年计算</title><link>http://www.cppblog.com/waterczh/archive/2007/12/12/38303.html</link><dc:creator>我的梦想我的游戏</dc:creator><author>我的梦想我的游戏</author><pubDate>Wed, 12 Dec 2007 05:37:00 GMT</pubDate><guid>http://www.cppblog.com/waterczh/archive/2007/12/12/38303.html</guid><wfw:comment>http://www.cppblog.com/waterczh/comments/38303.html</wfw:comment><comments>http://www.cppblog.com/waterczh/archive/2007/12/12/38303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterczh/comments/commentRss/38303.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterczh/services/trackbacks/38303.html</trackback:ping><description><![CDATA[<div class=posttitle><a class=singleposttitle id=viewpost1_TitleUrl href="http://blog.vckbase.com/teacheryang/archive/2006/10/16/22774.html"><strong><u><font color=#5c9a3d size=5>闰年的计算</font></u></strong></a> </div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;两天前我解答 [shutle] 网友计算闰年方法的时候，回答错误，在这里一并更正并致歉。后来查阅了资料，现把计算方法和原理粘贴一下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们知道地球自转一圈为1天，地球围绕太阳公转一圈为1年。那1年到底等于多少天哪？答案是：1年=365天5小时48分46秒，即 365.242199[074] 天(注：用[xxx]表示无限循环)</p>
<p>因此，4年 = 4*365.242199[074] = 4*365 + 0.9687[962] 天<br>显然，每隔4年，就要多出了将近1天，因此公元历法就定义㈠：<strong>每4年加一天</strong>，即闰年(366天)<br>那么，也就是说4年就多算了：1-0.9687[962] = 0.0312[037]天</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;照这样算下去，100年中有25次闰年，那么就会多计算了 25*0.0312[037]=0.7800[925] 天，这又太接近1天了，因此公元历法就定义㈡：<strong>每100年的那年不算闰年</strong>。<br>于是：<br>&nbsp;&nbsp;&nbsp;&nbsp;100年中就又会少算 1-0.7800[925]=0.2199[074] 天<br>&nbsp;&nbsp;&nbsp;&nbsp;200年会少算 2*0.2199[074] = 0.439[814] 天<br>&nbsp;&nbsp;&nbsp;&nbsp;300年会少算 3*0.2199[074] = 0.6597[2] 天<br>&nbsp;&nbsp;&nbsp;&nbsp;400年会少算 4*0.2199[074] = 0.87[962] 天<br><br>停！400年后的误差又接近1天了，于是公元历法进行修正㈢：<strong>400年的那年(虽然是100年的倍数)，但又算闰年啦</strong>。于是，400年的时候，由于多算了一次闰年，那么，<br>每隔400年就会多算：1-0.87[962] = 0.12[037] 天</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显然，等到4000年的时候（那时，看到这个帖子的人都死了2000年了），误差又到1天多了，也许那个时候公元历法有会进行修改了&#8220;每4000年少一个闰年&#8221;。哈哈，反正不管我们的事了。但也不尽然，因为地球的自转很不稳定，但总的趋势是每年要慢一丁点（大家是否还记得今年2006年元旦，全世界的人都要把表拨慢1秒钟？）由于阴差阳错，也许4000年后并不需要少算一个闰年也不一定呐。总结一下闰年的算法：<br>㈠ 每4年一闰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;㈡ 每100年的那年不闰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;㈢ 每400年的那年又闰<br>真罗嗦，用咱们IT人的话说，就是<strong>能被4整除但不能被100整除，可是却能被400整除的年是闰年<img height=20 src="http://blog.vckbase.com/Emoticons/QQ/14.gif" width=20 border=0></strong><br></p>
<img src ="http://www.cppblog.com/waterczh/aggbug/38303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterczh/" target="_blank">我的梦想我的游戏</a> 2007-12-12 13:37 <a href="http://www.cppblog.com/waterczh/archive/2007/12/12/38303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cp命令问题总算解决了，mark一下</title><link>http://www.cppblog.com/waterczh/archive/2007/12/11/38244.html</link><dc:creator>我的梦想我的游戏</dc:creator><author>我的梦想我的游戏</author><pubDate>Tue, 11 Dec 2007 08:40:00 GMT</pubDate><guid>http://www.cppblog.com/waterczh/archive/2007/12/11/38244.html</guid><wfw:comment>http://www.cppblog.com/waterczh/comments/38244.html</wfw:comment><comments>http://www.cppblog.com/waterczh/archive/2007/12/11/38244.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/waterczh/comments/commentRss/38244.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterczh/services/trackbacks/38244.html</trackback:ping><description><![CDATA[困扰了一周的cp命令问题总算解决了，<br><br>现象：CP命令拷贝文件，新生成的文件为只读属性<br><br>原因：文件所在的盘文件格式为NTFS，不知道由于什么深层原因会导致如此<br><br>解决：重新格式化为FAT32，就OK了<br><br>在这里mark一下 
<img src ="http://www.cppblog.com/waterczh/aggbug/38244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterczh/" target="_blank">我的梦想我的游戏</a> 2007-12-11 16:40 <a href="http://www.cppblog.com/waterczh/archive/2007/12/11/38244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TCP/IP协议</title><link>http://www.cppblog.com/waterczh/archive/2007/12/11/38242.html</link><dc:creator>我的梦想我的游戏</dc:creator><author>我的梦想我的游戏</author><pubDate>Tue, 11 Dec 2007 08:36:00 GMT</pubDate><guid>http://www.cppblog.com/waterczh/archive/2007/12/11/38242.html</guid><wfw:comment>http://www.cppblog.com/waterczh/comments/38242.html</wfw:comment><comments>http://www.cppblog.com/waterczh/archive/2007/12/11/38242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterczh/comments/commentRss/38242.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterczh/services/trackbacks/38242.html</trackback:ping><description><![CDATA[<p>好久没看书了，<br>准备把这个好好看一下，<br>希望不要令我失望<br><br>《TCP-IP详解》</p>
<img src ="http://www.cppblog.com/waterczh/aggbug/38242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterczh/" target="_blank">我的梦想我的游戏</a> 2007-12-11 16:36 <a href="http://www.cppblog.com/waterczh/archive/2007/12/11/38242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>D3D9初探</title><link>http://www.cppblog.com/waterczh/archive/2006/04/25/6232.html</link><dc:creator>我的梦想我的游戏</dc:creator><author>我的梦想我的游戏</author><pubDate>Tue, 25 Apr 2006 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/waterczh/archive/2006/04/25/6232.html</guid><wfw:comment>http://www.cppblog.com/waterczh/comments/6232.html</wfw:comment><comments>http://www.cppblog.com/waterczh/archive/2006/04/25/6232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/waterczh/comments/commentRss/6232.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterczh/services/trackbacks/6232.html</trackback:ping><description><![CDATA[
		<a href="/Files/waterczh/d3d9_example.rar">http://www.cppblog.com/Files/waterczh/d3d9_example.rar</a>
<img src ="http://www.cppblog.com/waterczh/aggbug/6232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterczh/" target="_blank">我的梦想我的游戏</a> 2006-04-25 11:20 <a href="http://www.cppblog.com/waterczh/archive/2006/04/25/6232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QQ的API,他们简单的使用copydata,没有使用rpc之类</title><link>http://www.cppblog.com/waterczh/archive/2006/04/24/6156.html</link><dc:creator>我的梦想我的游戏</dc:creator><author>我的梦想我的游戏</author><pubDate>Mon, 24 Apr 2006 04:59:00 GMT</pubDate><guid>http://www.cppblog.com/waterczh/archive/2006/04/24/6156.html</guid><wfw:comment>http://www.cppblog.com/waterczh/comments/6156.html</wfw:comment><comments>http://www.cppblog.com/waterczh/archive/2006/04/24/6156.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/waterczh/comments/commentRss/6156.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterczh/services/trackbacks/6156.html</trackback:ping><description><![CDATA[
		<table style="MARGIN-TOP: 5px" cellspacing="0" cellpadding="0" width="695" border="0">
				<tbody>
						<tr>
								<td class="td" width="90%" bgcolor="#eeeeee" height="24">
										<p class="STYLE3" align="center">
												<strong>QQ API设计说明书</strong>
												<br />
												<strong>深圳腾讯计算机系统有限公司</strong>
										</p>
								</td>
						</tr>
						<tr>
								<td class="td1" height="71">
										<p>
												<strong>目录</strong>
												<strong>
												</strong>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723107">一、引言</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723108">1.1 编写目的</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723109">1.2 更新时间</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723110">二、总体设计</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723111">三、注册的系统消息</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723112">3.1 WM_QQAPI_REGISTER</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723113">3.2 WM_QQAPI_REGISTER_RESP</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723114">3.3 WM_QQAPI_AVAILABLE</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723115">四、从设备到QQ的自定义事件</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723116">4.1 EVENT_QQAPI_SET_AUDIODEVICE</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723117">4.2 EVENT_QQAPI_GET_USERINFO</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723118">4.3 EVENT_QQAPI_PRESS_KEY</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723119">4.4 EVENT_QQAPI_CALL</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723120">4.5 EVENT_QQAPI_MUTE</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723121">4.6 EVENT_QQAPI_UNREGISTER</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723122">五、从QQ到设备的自定义事件</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723123">5.1 EVENT_QQAPI_USERINFO</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723124">5.2 EVENT_QQAPI_STATUS_CHANGE</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723125">5.3 EVENT_QQAPI_SHUTDOWN</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723126">六、双向的自定义事件</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723127">6.1 EVENT_QQAPI_CALL_STATUS</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723128">七、错误码定义</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723129">7.1 从QQ到设备――EVENT_QQAPI_ERROR</a>
												<br />
												<a href="http://www2.uuzone.com/app/blogTopic.do#_Toc104723130">八、参数类型码表</a>
										</p>
										<h1>
												<br />
												<a title="_Toc104723107" name="_Toc104723107">
												</a>一、引言 </h1>
										<h2>
												<a title="_Toc104723108" name="_Toc104723108">
												</a>1.1 编写目的 </h2>
										<p>本文档提供了QQ API接口说明，以供第三方应用程序使用，用于QQ和硬件设备（例如USB Phone）的交互。 </p>
										<h2>
												<a title="_Toc104723109" name="_Toc104723109">
												</a>1.2 更新时间 </h2>
										<p>最后修订日期：2005-05-24<br />版本号：v1.0 </p>
										<h1>
												<a title="_Toc104723110" name="_Toc104723110">
												</a>二、总体设计 </h1>
										<p>QQ应用程序和第三方应用程序以收发消息的方式进行通讯。 <br />双方未成功注册之前，采用RegisterWindowMessage（Windows API）注册的系统消息进行交互，注册成功后，双方分别获取对方的窗口句柄，接下来的交互通过收发WM_COPYDATA（Windows消息）消息完成。 <br />WM_COPYDATA的wParam参数为发送方的窗口句柄，lParam为指向COPYDATASTRUCT结构的指针，COPYDATASTRUCT定义如下： </p>
										<pre>						typedef struct tagCOPYDATASTRUCT{			
			</pre>
										<pre>						?????? ULONG_PTR????????????? dwData; 			
			</pre>
										<pre>						???????DWORD???? ??????????? cbData; 			
			</pre>
										<pre>						???????PVOID???? ????????????? lpData; 			
			</pre>
										<pre>						}COPYDATASTRUCT, *PCOPYDATASTRUCT;			
			</pre>
										<pre>						dwData：事件码，标示传送的消息事件码 			
			</pre>
										<pre>						lpData：消息参数，采用多个相连的“类型（1字节）＋长度（4字节）＋值”的格式。所有的参数类型码表见8 参数类型码表 			
			</pre>
										<pre>						cbData：消息参数总长度，单位字节 			
			</pre>
										<h1>
												<a title="_Toc104723111" name="_Toc104723111">
												</a>三、注册的系统消息 </h1>
										<p>第三方程序使用Windows SDK――RegisterWindowMessage，进行下列系统消息的注册。例如：RegisterWindowMessage(“WM_QQAPI_REGISTER”); </p>
										<h2>
												<a title="_Toc104723112" name="_Toc104723112">
												</a>3.1 WM_QQAPI_REGISTER </h2>
										<p>消息名：注册消息 <br />方向：设备àQQ<br />wParam：发送方的窗口句柄 <br />lParam：QQ API版本号，目前为100，表示1.00。 <br />第三方应用程序启动并检测到可用的设备后，向所有Windows窗口广播这个消息，带上自己的窗口句柄作为消息参数，如下： <br />SendMessage( HWND_BROADCAST, WM_QQAPI_REGISTER, 发送端窗口句柄, 0);<br />当QQ收到这个消息时，弹出“外设控制”窗口等待用户选择，如下： <br /><img height="265" alt="QQ" src="http://www2.uuzone.com/app/0_clip_image002.jpg" width="427" onload="imgResize(this)" /></p>
										<h2>
												<a title="_Toc104723113" name="_Toc104723113">
												</a>3.2 WM_QQAPI_REGISTER_RESP </h2>
										<p>消息名：注册回复消息<br />方向：QQà设备<br />wParam：值如下：<br />WAITING（1）：等待用户选择<br />OK（2）：用户选择“允许使用”<br />REJECT（3）：用户选择“禁止使用”<br />lParam：当wParam为OK（2）时，lParam为QQ应用程序的窗口句柄。<br />当用户选择“禁止使用”之后，如果第三方应用程序再次发送WM_QQAPI_REGISTER消息，QQ不再弹出“QQ安全警告”框，直接返回REJECT的WM_QQAPI_REGISTER_RESP消息，直到QQ程序重新启动为止。 </p>
										<h2>
												<a title="_Toc104723114" name="_Toc104723114">
												</a>3.3 WM_QQAPI_AVAILABLE </h2>
										<p>消息名：QQ API可用消息<br />方向：QQà设备<br />wParam：发送方的窗口句柄，即QQ程序的窗口句柄<br />lParam：QQ API版本号，目前为1<br />当QQ启动后，向所有Windows窗口广播这个消息：<br />SendMessage( HWND_BROADCAST, WM_QQAPI_AVAILABLE, QQ窗口句柄, 0);<br />当第三方应用程序收到这个消息时，再发起WM_QQAPI_REGISTER消息进行注册。这种情况出现在，当第三方应用程序先启动，而QQ程序后启动的情况下。 </p>
										<h1>
												<a title="_Toc104723115" name="_Toc104723115">
												</a>四、从设备到QQ的自定义事件 </h1>
										<h2>
												<a title="_Toc104723116" name="_Toc104723116">
												</a>4.1 EVENT_QQAPI_SET_AUDIODEVICE </h2>
										<p>事件说明：设置QQ使用的音频设备<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：10<br />lpData：如下表<br />cbData：消息参数总长度 </p>
										<table cellspacing="0" cellpadding="0" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>5 </p>
																</td>
																<td valign="top" width="108">
																		<p>设备名长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>音频设备名，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>6 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="272">
																		<p>音频设备的设备ID号，类型：DWORD </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>第三方应用程序可通过音频设备名字字符串或者通过设备ID号，来发送设置音频设备事件。 </p>
										<h2>
												<a title="_Toc104723117" name="_Toc104723117">
												</a>4.2 EVENT_QQAPI_GET_USERINFO </h2>
										<p>事件说明：获取QQ用户信息<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：11<br />lpData：NULL<br />cbData：0<br />QQ返回的用户信息，见5.1 EVENT_QQAPI_USERINFO。 </p>
										<h2>
												<a title="_Toc104723118" name="_Toc104723118">
												</a>4.3 EVENT_QQAPI_PRESS_KEY </h2>
										<p>事件说明：发送按键消息，当用户在设备上按下任何键时，发送此事件给QQ<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：12<br />lpData：如下表<br />cbData：消息参数总长度 </p>
										<table cellspacing="0" cellpadding="0" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>7 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="272">
																		<p>键值，详见“键值映射表” </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>键值映射表： </p>
										<table cellspacing="0" cellpadding="0" border="1">
												<tbody>
														<tr>
																<td valign="top" width="182">
																		<br />键名 </td>
																<td valign="top" width="144">
																		<p align="center">键值 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">0 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x80 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">1 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x81 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">2 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x82 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">3 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x83 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">4 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x84 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">5 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x85 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">6 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x86 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">7 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x87 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">8 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x88 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">9 </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x89 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">Down </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x8D </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">Up </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x8E </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">Clear </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x8F </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">OK (呼叫键) </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x91 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">Cancel (挂断键) </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x92 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">STAR (*) </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x93 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">SHARP (#) </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x94 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">Mute (静音键) </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x95 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="182">
																		<p align="center">RINGTONG (切换铃声键) </p>
																</td>
																<td valign="top" width="144">
																		<p align="center">0x96 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<h2>
												<a title="_Toc104723119" name="_Toc104723119">
												</a>4.4 EVENT_QQAPI_CALL </h2>
										<p>事件说明：直接呼叫一个好友用户<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：13<br />lpData：如下表<br />cbData：消息参数总长度<br />通过QQ号呼叫： </p>
										<table cellspacing="0" cellpadding="0" width="483" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>1 </p>
																</td>
																<td valign="top" width="108">
																		<p>QQ号长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>QQ号，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>通过昵称呼叫： </p>
										<table cellspacing="0" cellpadding="0" width="483" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>2 </p>
																</td>
																<td valign="top" width="108">
																		<p>昵称长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>昵称，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>通过速播号呼叫： </p>
										<table cellspacing="0" cellpadding="0" width="483" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>3 </p>
																</td>
																<td valign="top" width="108">
																		<p>速播号长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>速播号，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>通过PSTN号码呼叫： </p>
										<table cellspacing="0" cellpadding="0" width="483" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>4 </p>
																</td>
																<td valign="top" width="108">
																		<p>PSTN号码长度 </p>
																</td>
																<td valign="top" width="272">
																		<p>PSTN号码，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<h2>
												<a title="_Toc104723120" name="_Toc104723120">
												</a>4.5 EVENT_QQAPI_MUTE </h2>
										<p>事件说明：静音设置，根据参数决定是打开静音或者关闭静音<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：14<br />lpData：如下表<br />cbData：消息参数总长度 </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>12 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>静音状态标志。1：静音打开；0：静音关闭 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<h2>
												<a title="_Toc104723121" name="_Toc104723121">
												</a>4.6 EVENT_QQAPI_UNREGISTER </h2>
										<p>事件说明：反注册<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：15<br />lpData：NULL<br />cbData：0<br />当第三方应用程序退出时，向QQ发送此事件消息，QQ将音频设备切换回系统原有设备。 </p>
										<h1>
												<a title="_Toc104723122" name="_Toc104723122">
												</a>五、从QQ到设备的自定义事件 </h1>
										<h2>
												<a title="_Toc104723123" name="_Toc104723123">
												</a>5.1 EVENT_QQAPI_USERINFO </h2>
										<p>事件说明：返回本地QQ用户信息。对应于4.2 EVENT_QQAPI_GET_USERINFO<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：16<br />lpData：如下表<br />cbData：消息参数总长度 </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>1 </p>
																</td>
																<td valign="top" width="108">
																		<p>QQ号长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>QQ号，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>2 </p>
																</td>
																<td valign="top" width="108">
																		<p>昵称长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>昵称，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<h2>
												<a title="_Toc104723124" name="_Toc104723124">
												</a>5.2 EVENT_QQAPI_STATUS_CHANGE </h2>
										<p>事件说明：QQ上的各种状态变化通知<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：17<br />lpData：如下表<br />cbData：消息参数总长度<br />状态变化类型说明： </p>
										<ol>
												<li>DIALNUM </li>
										</ol>
										<p>说明：拨号时的号码变化。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>11 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>DIALNUM，状态变换类型码：1 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>1 </p>
																</td>
																<td valign="top" width="108">
																		<p>QQ号长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>QQ号，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>当用户拨号，QQ在收号时，如果号码发生变换，例如用户在键盘上按一个号码，或用户在PC上按一个号码，或用户按清除键Clear，那么，QQ向第三方程序发送此事件通知。第三方程序可通过此事件通知来进行拨号过程中LCD的显示操作。 </p>
										<h2>
												<a title="_Toc104723125" name="_Toc104723125">
												</a>5.3 EVENT_QQAPI_SHUTDOWN </h2>
										<p>事件说明：关闭QQ应用程序<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：18<br />lpData：NULL<br />cbData：0<br />当QQ应用程序退出时，向第三方程序发送此事件消息。 </p>
										<h1>
												<a title="_Toc104723126" name="_Toc104723126">
												</a>六、双向的自定义事件 </h1>
										<h2>
												<a title="_Toc104723127" name="_Toc104723127">
												</a>6.1 EVENT_QQAPI_CALL_STATUS </h2>
										<p>事件说明：呼叫状态通知<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：19<br />lpData：如下表<br />cbData：消息参数总长度<br />呼叫状态类型说明：<br />（1）CONNECTING<br />方向：从QQ到设备<br />说明：呼出，正在等待对方应答。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>CONNECTING，呼叫状态类型码：1 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>10 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>通话人数，类型：char </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>1 </p>
																</td>
																<td valign="top" width="108">
																		<p>QQ号长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>QQ号，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>2 </p>
																</td>
																<td valign="top" width="108">
																		<p>昵称长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>昵称，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>其中，呼叫句柄为QQ分配的唯一呼叫标识符；通话人数为同时呼出的QQ个数；接下来紧跟的2个参数子项为被呼叫的QQ好友信息，如果被呼叫的QQ好友有多个，则有多个QQ好友信息。<br />回铃音由QQ控制播放。 </p>
										<p>（2）RING <br />方向：从QQ到设备<br />说明：呼入，振铃。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>RING，呼叫状态类型码：2 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>1 </p>
																</td>
																<td valign="top" width="108">
																		<p>QQ号长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>QQ号，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>2 </p>
																</td>
																<td valign="top" width="108">
																		<p>昵称长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>昵称，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>4（可选） </p>
																</td>
																<td valign="top" width="108">
																		<p>PSTN号码长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>PSTN号码，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>其中，呼叫句柄为QQ分配的唯一呼叫标识符；接下来的2个参数子项为呼入QQ好友信息；最后一个参数项为可选项，呼出的PSTN号码，该号码直接由呼叫方指定，本地QQ完成呼叫转移，转到PSTN号码上。如果RINGING带了“呼出的PSTN号码”，则本地不振铃，直接转移呼出；如果RINGING没带“呼出的PSTN号码”，则本地振铃。 </p>
										<p>（3）BUSY（针对转接盒设备）<br />方向：双向<br />说明：占线。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>BUSY，呼叫状态类型码：3 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>从QQ到设备：呼出，等待对方应答，且当对方的设备被PSTN占用时，则QQ向本地设备发送占线状态。<br />从设备到QQ：呼入，本地振铃，且当本地设备被PSTN占用时，则本地设备向QQ发送占线状态。 </p>
										<p>（4）ACCEPT<br />方向：从QQ到设备<br />说明：呼入或呼出，某方接受，双方进入通话状态。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>ACCEPT，呼叫状态类型码：4 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>（5）REJECT<br />方向：从QQ到设备<br />说明：呼入或呼出，某方拒绝。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>REJECT，呼叫状态类型码：5 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>（6）FINISH<br />方向：从QQ到设备<br />说明：呼入或呼出，通话结束，无论哪方发起。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>FINISH，呼叫状态类型码：6 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>（7）FAIL<br />方向：从QQ到设备<br />说明：呼出失败。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>FAIL，呼叫状态类型码：7 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>失败原因可能是，呼叫的用户不是QQ好友。 </p>
										<p>（8）HOLD（针对转接盒设备）<br />方向：从设备到QQ<br />说明：暂停通话，通话被切换到PSTN。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>HOLD，呼叫状态类型码：8 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>（9）RESUME（针对转接盒设备）<br />方向：从设备到QQ<br />说明：恢复通话，通话被切换到回QQ。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>RESUME，呼叫状态类型码：9 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>（10）MUTE<br />方向：从QQ到设备<br />说明：静音状态通知。参数子项依次为： </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>8 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>MUTE，呼叫状态类型码：10 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>9 </p>
																</td>
																<td valign="top" width="108">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>12 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>静音状态标志。1：静音打开；0：静音关闭 </p>
																</td>
														</tr>
												</tbody>
										</table>
										<h1>
												<a title="_Toc104723128" name="_Toc104723128">
												</a>七、错误码定义 </h1>
										<h2>
												<a title="_Toc104723129" name="_Toc104723129">
												</a>7.1 从QQ到设备――EVENT_QQAPI_ERROR </h2>
										<p>事件说明：从QQ到设备的错误通知<br />参数说明：WM_COPYDATA中的参数COPYDATASTRUCT结构说明详见2<br />dwData（事件码）：20<br />lpData：如下表<br />cbData：消息参数总长度 </p>
										<table cellspacing="0" cellpadding="0" width="495" border="1">
												<tbody>
														<tr>
																<td valign="top" width="103">
																		<br />参数类型码 </td>
																<td valign="top" width="108">
																		<p>长度 </p>
																</td>
																<td valign="top" width="284">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="103">
																		<p>12 </p>
																</td>
																<td valign="top" width="108">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="284">
																		<p>错误类型，类型：char </p>
																</td>
														</tr>
												</tbody>
										</table>
										<p>错误码定义： </p>
										<h1>
												<a title="_Toc104723130" name="_Toc104723130">
												</a>八、参数类型码表 </h1>
										<table cellspacing="0" cellpadding="0" width="519" border="1">
												<tbody>
														<tr>
																<td valign="top" width="91">
																		<p>参数类型码 </p>
																</td>
																<td valign="top" width="120">
																		<p>长度 </p>
																</td>
																<td valign="top" width="308">
																		<p>值说明 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>1 </p>
																</td>
																<td valign="top" width="120">
																		<p>QQ号长度 </p>
																</td>
																<td valign="top" width="308">
																		<p>QQ号，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>2 </p>
																</td>
																<td valign="top" width="120">
																		<p>昵称长度 </p>
																</td>
																<td valign="top" width="308">
																		<p>昵称，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>3 </p>
																</td>
																<td valign="top" width="120">
																		<p>速播号长度 </p>
																</td>
																<td valign="top" width="308">
																		<p>速播号，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>4 </p>
																</td>
																<td valign="top" width="120">
																		<p>PSTN号码长度 </p>
																</td>
																<td valign="top" width="308">
																		<p>PSTN号码，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>5 </p>
																</td>
																<td valign="top" width="120">
																		<p>设备名长度 </p>
																</td>
																<td valign="top" width="308">
																		<p>音频设备名，类型：以Null结尾的字符串 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>6 </p>
																</td>
																<td valign="top" width="120">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="308">
																		<p>音频设备的设备ID号，类型：DWORD </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>7 </p>
																</td>
																<td valign="top" width="120">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="308">
																		<p>键值，详见4.3的“键值映射表” </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>8 </p>
																</td>
																<td valign="top" width="120">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="308">
																		<p>呼叫状态的类型，类型：char，主要有：<br />（1）CONNECTING，呼叫状态类型码：1<br />（2）RING，呼叫状态类型码：2<br />（3）BUSY，呼叫状态类型码：3<br />（4）ACCEPT，呼叫状态类型码：4<br />（5）REJECT，呼叫状态类型码：5<br />（6）FINISH，呼叫状态类型码：6<br />（7）FAIL，呼叫状态类型码：7<br />（8）HOLD，呼叫状态类型码：8<br />（9）RESUME，呼叫状态类型码：9<br />（10）MUTE，呼叫状态类型码：10 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>9 </p>
																</td>
																<td valign="top" width="120">
																		<p>4字节 </p>
																</td>
																<td valign="top" width="308">
																		<p>呼叫句柄（CallHandle），类型：DWORD </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>10 </p>
																</td>
																<td valign="top" width="120">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="308">
																		<p>通话人数，类型：char<br />注：通话人数会影响后续的参数子项，例如当通话人数为2，后面会跟两份的QQ用户信息。 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>11 </p>
																</td>
																<td valign="top" width="120">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="308">
																		<p>状态变换的类型，类型：char，主要有：<br />（1）DIALNUM，状态变换类型码：1 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>12 </p>
																</td>
																<td valign="top" width="120">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="308">
																		<p>静音状态标志。1：静音打开；0：静音关闭 </p>
																</td>
														</tr>
														<tr>
																<td valign="top" width="91">
																		<p>13 </p>
																</td>
																<td valign="top" width="120">
																		<p>1字节 </p>
																</td>
																<td valign="top" width="308">
																		<p>错误类型，类型：char </p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/waterczh/aggbug/6156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterczh/" target="_blank">我的梦想我的游戏</a> 2006-04-24 12:59 <a href="http://www.cppblog.com/waterczh/archive/2006/04/24/6156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作线程中调用UI线程创建的窗口的UpdateData会导致Assert的问题及解决办法(ZZ)</title><link>http://www.cppblog.com/waterczh/archive/2006/04/21/6009.html</link><dc:creator>我的梦想我的游戏</dc:creator><author>我的梦想我的游戏</author><pubDate>Fri, 21 Apr 2006 04:56:00 GMT</pubDate><guid>http://www.cppblog.com/waterczh/archive/2006/04/21/6009.html</guid><wfw:comment>http://www.cppblog.com/waterczh/comments/6009.html</wfw:comment><comments>http://www.cppblog.com/waterczh/archive/2006/04/21/6009.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/waterczh/comments/commentRss/6009.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/waterczh/services/trackbacks/6009.html</trackback:ping><description><![CDATA[最近写了个代码,在UI线程中创建了一个窗口,然后在工作线程中修改了这个窗口中的一些数据,然后想用UpdateData(FALSE)来更新窗口的内容,结果在Debug版本下面就出现了Assert报错,说出错地方是wincore.cpp的888行和889行,就是这两句<br />  ASSERT((p = pMap-&gt;LookupPermanent(m_hWnd)) != NULL ||<br />   (p = pMap-&gt;LookupTemporary(m_hWnd)) != NULL);<br />  ASSERT((CWnd*)p == this);   // must be us<br />    我用MFC也没有多久,也不太熟悉,翻了翻资料,在<a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;147578"><font color="#000000">http://support.microsoft.com/default.aspx?scid=kb;en-us;147578</font></a>找到一篇文章,就是说MFC窗口跨线程的问题的,大概意思就是MFC的窗口是线程相关的,每个窗口的HandleMap是储存在线程相关的堆栈里面的(thread-local-storage (TLS) ),那这样我就理解了为什么上面两句ASSERT会出错了,线程环境都切换了当然线程堆栈的数据也就不一样了.<br />    这篇文章提供了两种修改方案:<br />    一种是用FromHandle来获得一个CWnd*,然后再调用UpdateData,这个方案我没有实验成功,结果是错虽然不报了,但是界面也没有被更新.<br />    另外一种是通过发消息的方法转到UI线程去处理.可以在窗口映射一个消息,比如ON_MESSAGE(WM_UPDATEDATA, OnUpdateData),然后用SendMessage(WM_UPDATEDATA, FALSE)传消息给窗口,窗口的消息处理肯定是在UI线程里面,这时候可以用<br />LRESULT CProtectPage::OnUpdateData(WPARAM wParam, LPARAM lParam)<br />{<br /> UpdateData(wParam);<br /> return 0;<br />}<br />来更新界面,实验是成功的,ASSERT就被消除了.<br />    还是有点疑惑,就是刚开始直接在工作线程中调用UpdateData(FALSE)的时候,虽然有ASSERT报错,但是结果还是正确的,似乎没有什么影响,不知道这个ASSERT到底意味着什么?<br /><img src ="http://www.cppblog.com/waterczh/aggbug/6009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/waterczh/" target="_blank">我的梦想我的游戏</a> 2006-04-21 12:56 <a href="http://www.cppblog.com/waterczh/archive/2006/04/21/6009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>