﻿<?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>IT博客-平民程序 - linghuye's blog-随笔分类-编程札记</title><link>http://www.cnitblog.com/linghuye/category/588.html</link><description>&lt;p align=right style="background-color: transparent"&gt;天下风云出我辈，一入江湖岁月催。皇图霸业谈笑中，不胜人生一场醉。提剑跨骑挥鬼雨，白骨如山鸟惊飞。尘事如潮人如水，只笑江湖几人回。&lt;p align=right style="background-color: transparent;"&gt;&lt;/p&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 18:41:34 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 18:41:34 GMT</pubDate><ttl>60</ttl><item><title>VS2005以后的DLL运行时库发布问题</title><link>http://www.cnitblog.com/linghuye/archive/2008/07/12/46641.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 12 Jul 2008 10:30:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2008/07/12/46641.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/46641.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2008/07/12/46641.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/46641.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/46641.html</trackback:ping><description><![CDATA[<p>从VS2005开始,M$发明了一种高科技手段的来加载各种版本的ATL,MFC,CRT,C++标准库CRT的DLL运行库,以解决DLL Hell问题,那就是manifest文件. <br>我个人认为没有比这更SB的DLL发布方式了,问题更加严重了.</p>
<p>于是出现了更多的VS2005编译出的程序不能在某些机器上运行的情况,因为msvcrt80.dll就有若干不兼容的小版本,如:<br>8.0.50608.0/8.0.50727.42/8.0.50727.163/8.0.50727.762(VS80sp1)/8.0.50727.1433等等,这些安装在Windows\WinSxS (WinSex?)对于一个使用各种第三方的没有源代码的lib的程序,每个第三方库对应的msvcrt80版本都不能漏装,关键是你到哪里去找这些版本的Debug版的DLL.</p>
<p>众人纷纷讨论解决该问题的技巧和心得体会,大部分人使用静态联编了事,惹不起我还躲不起吗.而我至今没有发现一种简单可靠的发布绿色版的使用动态运行时库Vs2005程序的方法,而且我不喜欢静态联编,所以我坚持VC6和Vs2003.</p>
<p>VS2005肯定是要生成manifest资源的,唯一能指定的是:这个manifest资源是作为执行文件的资源数据内嵌,还是生成为一个独立的文件.<br>工程属性 -&gt; 配置属性 -&gt; 清单工具 -&gt; 输入与输出 -&gt; 嵌入清单 -&gt; 是/否.<br>如果,生成为一个独立的文件,再删除这个文件,运行程序会报错,"由于应用程序配置不正确,未能启动此应用程序。请查看清单文件查找可能的错误。".<br>就是说,想用VS2005以上的运行库,就必须有manifest资源,不管是内嵌还是独立文件.<br></p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/46641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2008-07-12 18:30 <a href="http://www.cnitblog.com/linghuye/archive/2008/07/12/46641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WoW的UI脚本对象实现方法</title><link>http://www.cnitblog.com/linghuye/archive/2008/04/02/41856.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Wed, 02 Apr 2008 14:27:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2008/04/02/41856.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/41856.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2008/04/02/41856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/41856.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/41856.html</trackback:ping><description><![CDATA[<p>WoW的UI/XML脚本中定义的每个UI对象都可以在lua脚本中使用其名字进行调用,如<br>GameMenuFrame:Show();&#160;&#160;&#160; // 方法<br>local a = checkbutton.isChecked;// 属性</p>
<p>在wow中测试了下,发现:<br>1.type(GameMenuFrame) == "table"<br>2.GameMenuFrame has only one field, that is, GameMenuFrame[0] is a userdata<br>3.GameMenuFrame has metatable, GameMenuFrame[0] has NO metatable.<br>4.The metatable of GameMenuFrame has only one override field, that is "__index".<br>5.And that "__index" field is a table contains functions.</p>
<p>So when calling GameMenuFrame:Show(), it calls GameMenuFrame.Show(GameMenuFrame), the GameMenuFrame has not a "Show" field, so it will find it in its metatable's "__index" field, that is:<br>getmetable(GameMenuFrame)["__index"]["Show"] which refers to a embbed function, the implementation will get the userdata from the GameMenuFrame table. This userdata points to a C memory, or C++ object, or C++ Object pointer, or anything.</p>
<p>For the attribute like 'checkbutton.tooltipText', the tooltipText field is a complete lua variable, created by wow lua script. C/C++ implemetation needs some trouble to read it into binary code and then use it.</p>
 <img src ="http://www.cnitblog.com/linghuye/aggbug/41856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2008-04-02 22:27 <a href="http://www.cnitblog.com/linghuye/archive/2008/04/02/41856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VSS在本地工程中的定义</title><link>http://www.cnitblog.com/linghuye/archive/2008/03/26/41477.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Wed, 26 Mar 2008 01:44:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2008/03/26/41477.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/41477.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2008/03/26/41477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/41477.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/41477.html</trackback:ping><description><![CDATA[1.定义在vssver.scc, mssccprj.scc,工程dsw,dsp文件中<br>2.vssver.scc, mssccprj.scc是自动生成的,删除之.<br>3.dsw中的每个子项目都有一个<br>&nbsp;&nbsp;&nbsp; begin source code control<br>&nbsp;&nbsp;&nbsp; "$/UICraft/BaseEngine", CSBBAAAA&nbsp;&nbsp;&nbsp; // 在Vss库中的绝对路径,&nbsp;$代笔Vss根目录.<br>&nbsp;&nbsp;&nbsp; ..\BaseEngine&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 本地相对目录<br>&nbsp;&nbsp;&nbsp; end source code control<br>4.dsp中<br># PROP Scc_ProjName ""$/BaseEngine", CSBBAAAA"<br># PROP Scc_LocalPath ".<br>注意这里的$表示dsw的根目录UICraft,不是Vss库的根目录.<br>dsw,dsp中的定义可以修改,不能删除.<br><br><br>
<img src ="http://www.cnitblog.com/linghuye/aggbug/41477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2008-03-26 09:44 <a href="http://www.cnitblog.com/linghuye/archive/2008/03/26/41477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC 2003远程调试步骤备忘</title><link>http://www.cnitblog.com/linghuye/archive/2008/02/16/39835.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 16 Feb 2008 15:40:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2008/02/16/39835.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/39835.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2008/02/16/39835.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/39835.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/39835.html</trackback:ping><description><![CDATA[1.解压下面链接的压缩包到调试目标机器,路径不限.<br>2.将待调试程序环境拷贝到调试目标机器,路径不限.<br>3.在目标机器运行压缩包中的StartDebug.bat.<br>4.在程序员机器上的VC IDE中设置: 调试&nbsp;-&gt;<br>连接:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选TCPIP方式<br>远程计算机:&nbsp; 填调试目标机器IP<br>远程命令:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 填待调试程序在调试目标机器上的绝对路径. <br><br><a style="COLOR: #ffff00" href="http://www.cnitblog.com/Files/linghuye/RemoteDebug.rar">http://www.cnitblog.com/Files/linghuye/RemoteDebug.rar</a> 
<img src ="http://www.cnitblog.com/linghuye/aggbug/39835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2008-02-16 23:40 <a href="http://www.cnitblog.com/linghuye/archive/2008/02/16/39835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ICOP的一些结论 --  仅是我的实践结论</title><link>http://www.cnitblog.com/linghuye/archive/2007/11/28/36997.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Wed, 28 Nov 2007 10:48:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2007/11/28/36997.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/36997.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2007/11/28/36997.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/36997.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/36997.html</trackback:ping><description><![CDATA[<p>对同一个连接连续调用多次WSASend是安全的,不需要等到前一个WSASend的操作完成,数据将按调用WSASend的调用顺序发送(当然,前提是没有人笨到用多线程对一个同一个连接连续调用多次WSASend).</p>
<p>但对同一个连接连续调用多次WSASend是一种不稳定的方案,因为可能出现WSAENOBUFS错误(实现总是如此丑陋),对于服务器而言,可能出现就是必然爆发. 由于没有机制可以量化多少个WSASend之后才会出现该错误,所以只能等出现了错误,再做错误处理,这样的逻辑很危险.</p>
<p>实践证明,多个WSASend不会提高发送速率,但会提高CPU占用率和WSAENOBUFS出现的几率,因为每个WSASend都要有一个完成处理流程,得不断地查问那么多的WSASend完成了没有,并作出处理.</p>
<p>对一个连接保持同时只有一个WSASend在运作,发送速率不会慢. 因为服务器不是服务于一个socket,而是服务于上千个socket,不要把IOCP下单个socket的得失看得太重.</p>
<p>一个连接保持同时只有一个WSASend是没错的,当然,也不要像我一样笨到每次WSASend只发送十几个字节数据,然后去责怪单次WSASend的低能,要知道WSASend接收的是一个缓冲区数组. 可以但不能浪费,不要走极端.</p>
<p>当SO_SNDBUF不为0, WSASend的数据被拷贝到底层缓冲区(AFD.sys)等待发送,出现WSAENOBUFS表示缓冲区不足.<br>当SO_SNDBUF为0, WSASend的数据被内核直接锁定,不可交换页面,这种资源是稀缺的,出现WSAENOBUFS表示物理页面数不足.</p>
<p>线程是个好东西,但越少越好.IOCP已经开了CPU*2个线程.</p>
<p>理论很完美,实现却要面对丑陋的现实.以上结论仅供参考.</p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/36997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2007-11-28 18:48 <a href="http://www.cnitblog.com/linghuye/archive/2007/11/28/36997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>优雅的代码</title><link>http://www.cnitblog.com/linghuye/archive/2007/04/29/26403.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sun, 29 Apr 2007 11:43:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2007/04/29/26403.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/26403.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2007/04/29/26403.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/26403.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/26403.html</trackback:ping><description><![CDATA[程序写到了一定阶段,我很喜欢写清晰优雅的代码.优雅的代码易于理解和维护,并给人以审美上的愉悦,于是我以为这就是健壮的代码.<br><br>但我看过很多的代码,特别是一些产品级的代码,以我的审美而言,长得大都很丑,但它们都很有效很健壮.<br><br>后来我知道了为什么,优雅清晰的代码对健壮性的贡献可能还不到30%的,而真正健壮的代码是那些在市场上跑上半年一年的,经受各种磨难摧残的代码,这些代码为了生存,被打上了各式各样的丑陋的补丁,以对付现实环境中那些邪恶的攻击,丑陋的硬件缺陷,木马横行的客户机.<br><br>这好比,一个人在学院里学得再好的为人修养之道,也不如在那些在各种逆境中经历人生磨难的人在遇到危难时来得更为沉着,因为他们不知道现实世界的危险. 在外部危险的环境下我们要写懂得顽强生存的代码,而不是优雅的代码. 
<img src ="http://www.cnitblog.com/linghuye/aggbug/26403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2007-04-29 19:43 <a href="http://www.cnitblog.com/linghuye/archive/2007/04/29/26403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>float的格式</title><link>http://www.cnitblog.com/linghuye/archive/2007/03/20/24360.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Tue, 20 Mar 2007 10:13:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2007/03/20/24360.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/24360.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2007/03/20/24360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/24360.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/24360.html</trackback:ping><description><![CDATA[float是32位浮点,<br>Sign Bit S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Biased Exponent E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Packed Mantissa M<br>1 Bit in position&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8 Bits in positions 30-23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23 Bits in positions 22-0<br>最终值为: (-1)^S&nbsp; *&nbsp; 2^(E-127)&nbsp; *&nbsp; (1 + M/(2^23))<br>附加规则: <br>1.若E = 0 且 M = 0,表示值为0,所以有正负两个0.<br>2.若E = 0 且 M &lt;&gt; 0,表示值为(-1)^S&nbsp; *&nbsp; 2^(E-127)&nbsp; *&nbsp; (M/(2^22)).这种值称作denormal值,VC7内存观察器查看float值,后面跟着DEN就是这个意思.<br>3.若E = 255 且 M = 0,则表示值为无穷大.<br>4.若E = 255 且 M &lt;&gt; 0,则表示值为Not-a-Number.若M的最高位为0,则表示值为SNaN.若M的最高位为1,则表示值为QNaN. 
<img src ="http://www.cnitblog.com/linghuye/aggbug/24360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2007-03-20 18:13 <a href="http://www.cnitblog.com/linghuye/archive/2007/03/20/24360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TCP Socket编程的几点肮脏的问题</title><link>http://www.cnitblog.com/linghuye/archive/2007/01/07/21604.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sun, 07 Jan 2007 03:27:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2007/01/07/21604.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/21604.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2007/01/07/21604.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/21604.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/21604.html</trackback:ping><description><![CDATA[1.有客户端开多线程对服务器进行连接断开压力测试,在连接接近4000次时,再也连接不上服务器,过了段时间后恢复正常,而后再出现,如此往复.使用Prcess Explorer查看System Idle Process发现大量的TIME_WAIT状态下的Socket.<br /><font color="#ffff00">解析如下:</font><br />TCP TIME-WAIT 延迟断开TCP 连接时，套接字对被置于一种称为TIME-WAIT 的状态。这样，新的连接不会使用相同的协议、源 IP 地址、目标 IP 地址、源端口和目标端口，直到经过足够长的时间后，确保任何可能被错误路由或延迟的段没有被异常传送。在RFC 793 中，将这种套接字对不被其它连接重新使用的时间长度指定为 2 个MSL（最大段生存时间的 2 倍）或 4 分钟。对于Windows NT 和Windows 2000 来说，这是默认设置。然而，在此默认设置下，某些网络应用程序在很短时间内执行多个出站连接，就可能会在端口收回前用完所有的可用端口。Windows NT 和Windows 2000 提供两种方法来控制这种情况。第一种方法是使用TcpTimedWaitDelay 注册表参数，改变该数值。对于 Windows NT 和Windows 2000，其值最低可设置为30 秒，这样在大多数情况下不会出现问题。每二种方法是使用 MaxUserPorts 注册表参数，来配置用户可访问的临时端口数（用作出站连 接的源端口）。默认情况下，当应用程序从系统请求任何套接字用于出站调用时，就会提供一个数值在1024 到 5000 之间的端口。MaxUserPorts 参数可用于设置管理员所允许的出站连接的最大端口值。例如，将该值设置为10,000（十进制），就会有约 9000 个用户端口可用于出站连接。关于这一概念的详细信息，请参见 RFC 793，也可参见MaxFreeTcbs 和 MaxHashTableSize 注册表参数。<br />注册表位置:<br /><font color="#ffff00">HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters</font><br /><font color="#ffff00">主动断开的一方进入TIME_WAIT状态,被动断开的一方进入CLOSE_WAIT状态.不要试图使用SO_DONTLINGER设置避免TIME_WAIT状态!!!<br /></font><br /><font color="#ffff00">On a busy HTTP server, the number of sockets in this TIME_WAIT state can far exceed those in the ESTABLISHED state. For instance, I checked an IIS 6.0 box that serves a fairly busy corporate site earlier today and got 124 ESTABLISHED connections versus 431 in TIME_WAIT.<br /></font><br />The side shutting down the connection gets the TIME_WAIT. It's typical for a webserver to shutdown the connection immediately after sending a response. If you can instead stash the connection away and give the client time to close it you can push the TIME_WAIT to them. I believe Apache does something like this. In the worst case, if the client doesn't shutdown the connection, say within 5 seconds, you'll have to do it and suffer the TIME_WAIT. However if in that time the client does initiate the close then you have avoided a TIME_WAIT. <br /><br />2. If you are using I/O completion ports, note that the order of calls made to <b>WSASend/WSARecv</b> is also the order in which the buffers are populated. <strong>WSASend//WSARecv</strong>  should not be called on the same socket simultaneously from different threads, since it can result in an unpredictable buffer order. <br /><br />3.作客户端开1024个稳定连接到服务器,然后使用Prcess Explorer强行非法关闭该客户端,1024个连接瞬间被异常断开,服务器将不能检测到所有socket的断开,如果是完成端口,即时当前打开KeepAlive,即时当前正在执行异步<strong>WSARecv, </strong>GetQueuedCompletionStatus仍然可能无法返回正确的错误提示客户端关闭! Socket资源将残留.原来我以为仅在瞬间断电,操作系统崩溃,网线拔开这3种情况下才会发生该现象,看来进程崩溃也可以导致,只是以前的socket数量不足以让操作系统来不及处理.<br /> <br /><font color="#ffa500">References:<br /><font size="2">Windows 2000 TCP/IP 实现详述</font><br /></font><a href="http://www.port80software.com/200ok/archive/2004/12/07/205.aspx">http://www.port80software.com/200ok/archive/2004/12/07/205.aspx</a><br /><a href="http://support.microsoft.com/kb/q196271/">http://support.microsoft.com/kb/q196271/</a><img src ="http://www.cnitblog.com/linghuye/aggbug/21604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2007-01-07 11:27 <a href="http://www.cnitblog.com/linghuye/archive/2007/01/07/21604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏编程书籍</title><link>http://www.cnitblog.com/linghuye/archive/2006/12/10/20329.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sun, 10 Dec 2006 13:23:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/12/10/20329.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/20329.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/12/10/20329.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/20329.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/20329.html</trackback:ping><description><![CDATA[今天在看&lt;3D Game Engine Design&gt;时,突然发现LRN好像是专门做游戏编程电子书的组织,于是到emule上搜索LRN,搜到一批没见过的游戏编程相关书籍,于是狂下载之.<br /><br />最近还发现街上那些做数码图文的,能打印电子书并装订成书籍,每页3毛钱,花RMB180能做一本跟原版差不多的600页的$70的游戏编程书籍,把我高兴坏了,对着Amazon上的书可以少流点口水了,<br /><br />上帝保佑那些无私地为程序员做e书的人们.<img src ="http://www.cnitblog.com/linghuye/aggbug/20329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-12-10 21:23 <a href="http://www.cnitblog.com/linghuye/archive/2006/12/10/20329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>奇怪的应用程序正常初始化失败</title><link>http://www.cnitblog.com/linghuye/archive/2006/11/30/19779.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 30 Nov 2006 12:51:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/11/30/19779.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/19779.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/11/30/19779.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/19779.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/19779.html</trackback:ping><description><![CDATA[若A.exe静态链接B.dll,B.dll使用static HMODULE hDLL = ::LoadLibrary("C.dll");加载C.dll,则若C.dll加载失败,则A.exe出现"应用程序正常初始化(0xC0000005)失败.请单击"确定",终止应用程序."<br /><br />为避免 static HMODULE hRenderCraftDLL = ::LoadLibrary("C.dll");在程序一启动就运行加载,将其改为<br /> inline static HMODULE GetRenderCraftDLL()<br /> {<br />  static HMODULE hRenderCraftDLL = ::LoadLibrary("RenderCraft.dll");<br />  return hRenderCraftDLL;<br /> }<br />用函数来实现延迟加载的技巧.<br /><img src ="http://www.cnitblog.com/linghuye/aggbug/19779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-11-30 20:51 <a href="http://www.cnitblog.com/linghuye/archive/2006/11/30/19779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>平生最恨命令行 - Subversion</title><link>http://www.cnitblog.com/linghuye/archive/2006/11/28/19695.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Tue, 28 Nov 2006 13:08:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/11/28/19695.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/19695.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/11/28/19695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/19695.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/19695.html</trackback:ping><description><![CDATA[<p>sc create SVNService binpath= "D:\subversion\bin\svnserve.exe --service -r D:\svnroot" displayname= "SVNService" depend= Tcpip<br>切记:=号前无空格,=号有空格.<br>==========================<br>配置authz:<br>[groups]<br>admin=linghuye<br>[/]<br>@admin=rw<br>==========================<br>配置svnserve:<br>anon-access = none<br>auth-access = write<br>password-db = passwd<br>authz-db = authz<br>==========================<br>Global ignore pattern:<br>*.obj *.pch *.pdb *.ilk *.exp *.trg *.tmp *.plg *.bsc *.sbr *.aps *.ncb *.7z */Objs *\Objs */Debug */Debug<br>==========================<br>允许修改版本的Log:<br>在版本库hooks目录下建立pre-revprop-change.bat文件,内容:<br>@exit 0<br>==========================<br>忽略本地版本目录中的其他文件和目录<br>目录property设置如:&nbsp;svn:ignore Objs<br></p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/19695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-11-28 21:08 <a href="http://www.cnitblog.com/linghuye/archive/2006/11/28/19695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>木马病毒处理备忘</title><link>http://www.cnitblog.com/linghuye/archive/2006/08/12/15175.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 12 Aug 2006 13:07:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/08/12/15175.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/15175.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/08/12/15175.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/15175.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/15175.html</trackback:ping><description><![CDATA[
		<p>我的机器从不装杀毒软件,杀毒软件对我其实没什么作用,影响系统速度,查一次硬盘耗时数小时,又杀不了新出的病毒,有时杀的系统不干不净,所以有问题都是google一下,然后自己动手清除,平时用Processor Explorer和Autoruns例行检查预防,备忘总结如下:</p>
		<p>
				<font color="#ffff00">病毒分析:</font>
		</p>
		<p>
				<font color="#ffff00">Explorer Browser Helper Objects型病毒</font>
				<br />出现迹象:Autoruns报告出现在HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects标签下的项目.<br />编程技术:使用Windows Browser Helper Objects技术,为DLL形式,随Explorer和Internet Explorer启动而发作,表象是随开机进入桌面而启动.<br />删除手法:使用Process Explorer杀掉Explorer.exe和所有Internet Explorer进程,使用Explorer.exe的Run,浏览文件功能找到并删除相关DLL文件,再使用Autoruns删除注册表项.<br />一般项目:标签下只该有google的产品,其他一律删除.<br />病毒举例:易趣,3721, System32\googlebar.dll(冒充)</p>
		<p>
				<font color="#ffff00">Internet Explorer Toolbar型病毒<br /></font>出现迹象:Autoruns报告出现在HKLM\Software\Microsoft\Internet Explorer\Toolbar标签下的项目.<br />编程技术:使用Internet Explorer Toolbar Extension技术,为DLL形式,随Internet Explorer启动而发作,表象是打开IE浏览器而启动.<br />删除手法:使用Process Explorer杀掉Explorer.exe和所有Internet Explorer进程,使用Explorer.exe的Run,浏览功能删除文件,使用Autoruns删除注册表项.<br />一般项目:标签下只该有google的产品,其他一律删除.<br />病毒举例:雅虎助手等<br /><br /><font color="#ffff00">CurrentControlSet Services型病毒</font><br />出现迹象:Autoruns报告出现在HKLM\System\CurrentControlSet\Services标签下的项目.<br />编程技术:Exe形式,注册为Service.<br />删除手法:使用Process Explorer杀掉该进程,删除该Exe文件,用Autoruns删除注册表项.<br />一般项目:微软自身的产品<br />病毒举例:<strong><br /><br /></strong><font color="#ffff00">CurrentControlSet Drivers型病毒</font> <br />出现迹象:Autoruns报告出现在HKLM\System\CurrentControlSet\Services标签下的项目.<br />编程技术:sys形式,注册为系统驱动程序,随系统启动.<br />删除手法:确定是病毒文件后,用IceSword强行删除文件和注册表项.<br />一般项目:微软自身的产品<br />病毒举例:<strong>Adware.Roogoo, sysmgr的</strong>NWUPSPX.SYS,iebar的fsprot.sys和moprot.sys<br /><br /><font color="#ffff00">Windows CurrentVersion Run型病毒</font>   <br />出现迹象:Autoruns报告出现在HKCU\Software\Microsoft\Windows\CurrentVersion\Run标签下的项目.<br />编程技术:Exe形式,注册为Run下自动启动.<br />删除手法:使用Process Explorer杀掉该进程,删除该Exe文件,用Autoruns删除注册表项.<br />一般项目:<br /><br /><font color="#ffff00">Winsock Providers型病毒<br /></font>出现迹象:Autoruns报告出现在Winsock Providers标签下的项目.<br />编程技术:Dll形式,技术上要比IE BHO插件木马之类的高,删除后会导致TCP/IP协议栈损毁,导致上网失败,无法查找杀毒资料.<br />删除手法:进入Windows安全模式,使用Autoruns删除注册表项,如果出现删除失败提示,使用RegEdit设置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters的权限-&gt;高级-&gt;所有者为Administrators,然后再删,然后再用软件WinsockXPFix恢复Winsock协议栈后解决.<br />病毒举例:xboxcenter.dll,quartz32.dll<br /><br />非一般启动手法:<br />1.使用Windows任务计划程序调度启动,位于Autoruns Task Scheduler栏下,例子:iebb.exe<br /><br /><br />禽兽之变诈几何哉,只增笑尔?<br /><br />References:<br /><a href="http://360safe.com/"><font color="#ffff00">http://360safe.com/</font></a></p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/15175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-08-12 21:07 <a href="http://www.cnitblog.com/linghuye/archive/2006/08/12/15175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinRar和7zip 代码备份/程序发布语法备忘</title><link>http://www.cnitblog.com/linghuye/archive/2006/07/13/13615.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 13 Jul 2006 15:40:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/07/13/13615.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/13615.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/07/13/13615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/13615.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/13615.html</trackback:ping><description><![CDATA[<p>CALL "E:\Program Files\7-zip\7z.exe" a MyWarCraftStudio @Backup.lst <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#45;&#120;&#114;&#64;&#69;&#120;&#99;&#108;&#117;&#100;&#101;&#70;&#105;&#108;&#101;&#115;&#46;&#108;&#115;&#116;"><font color=#ffffff>-xr@ExcludeFiles.lst</font></a><br>CALL "E:\Program Files\WinRAR\WinRAR.exe" a DmGameSDK @GameSDKFiles.lst <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#45;&#120;&#64;&#69;&#120;&#99;&#108;&#117;&#100;&#101;&#70;&#105;&#108;&#101;&#115;&#46;&#108;&#115;&#116;"><font color=#ffffff>-x@ExcludeFiles.lst</font></a></p>
<p>Backup.lst为文件列表文本文件<br>ExcludeFiles.lst为扩展名列表文本文件,Example:</p>
<p>*.log <br>*.obj <br>*.ilk <br>*.ncb <br>*.7z <br>*.rar<br>*.pch<br>*\Objs<br><br><a class="" title="" href="http://www.cnitblog.com/Files/linghuye/PackShell.rar" target=""><font color=#ffff00><font color=#ffff00>http://www.cnitblog.com/Files/linghuye/PackShell.rar</font><br></font></a><br>create&nbsp;a .lst file as a text file with file/director pathname every line, then double click the .lst file in window shell, it will pack the files into a 7z package.</p><img src ="http://www.cnitblog.com/linghuye/aggbug/13615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-07-13 23:40 <a href="http://www.cnitblog.com/linghuye/archive/2006/07/13/13615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MYSQL 存储过程编写低级错误</title><link>http://www.cnitblog.com/linghuye/archive/2006/07/01/13130.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 01 Jul 2006 07:38:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/07/01/13130.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/13130.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/07/01/13130.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/13130.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/13130.html</trackback:ping><description><![CDATA[
		<p>1.出现PROCEDURE xxx can't return a result set in the given context when execute ...错误,mysql_real_connect连接时没有指定clientflag为CLIENT_MULTI_STATEMENTS!<br /><br />2. You can create a prepared statement with the <tt>PREPARE</tt> statement, supplying the SQL text in a session variable.就是说不能是局部变量,或存储过程范围内的变量.<br /><br />3.syntax sample for memo </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.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">DELIMITER $$;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DROP PROCEDURE IF EXISTS `silvermoney`.`BalanceCashSavings`$$<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />CREATE PROCEDURE `BalanceCashSavings`(vinCashMoney BIGINT, vinAccountID INT, vinBnCode VARCHAR(</span>
				<span style="COLOR: #000000">32</span>
				<span style="COLOR: #000000">), vinBnProcessor VARCHAR(</span>
				<span style="COLOR: #000000">32</span>
				<span style="COLOR: #000000">), OUT vErrCode INT)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />st_main : BEGIN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DECLARE varCurCashMoney BIGINT;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DECLARE varCurBankSaving BIGINT;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />SELECT CashMoney, BankMoney INTO varCurCashMoney, varCurBankSaving FROM SilverAccount WHERE AccountID</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">vinAccountID;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />IF FOUND_ROWS() </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000"> THEN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />   SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />   LEAVE st_main;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />END IF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />START TRANSACTION;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />IF vinCashMoney </span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000"> THEN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    IF varCurBankSaving </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000"> vinCashMoney THEN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">2</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        LEAVE st_main;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    END IF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    UPDATE SilverAccount SET CashMoney</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">CashMoney </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> vinCashMoney, BankMoney </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> BankMoney </span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000"> vinCashMoney WHERE AccountID</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">vinAccountID;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    IF ROW_COUNT() </span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000"> THEN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">3</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        LEAVE st_main;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    END IF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    BEGIN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    DECLARE EXIT HANDLER FOR SQLEXCEPTION SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">27</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    SET @vSQLInsertBn </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">INSERT Business_</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(CURDATE()</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> VALUES('</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> vinBnCode </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">', </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(vinAccountID) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(vinCashMoney) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, 0, '</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(CURDATE()</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">', 5, '</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> vinBnProcessor </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">', '')</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    PREPARE dynSQL FROM @vSQLInsertBn;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    EXECUTE dynSQL;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    DEALLOCATE PREPARE dynSQL;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    END;     <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />ELSE<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    IF varCurCashMoney </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">vinCashMoney THEN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">5</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        LEAVE st_main;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    END IF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    UPDATE SilverAccount SET CashMoney</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">CashMoney</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">vinCashMoney, BankMoney</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">BankMoney</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">vinCashMoney WHERE AccountID</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">vinAccountID;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    IF ROW_COUNT() </span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000"> THEN <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">6</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        LEAVE st_main;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    END IF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />   <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    BEGIN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    DECLARE EXIT HANDLER FOR SQLEXCEPTION SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">27</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    SET @vSQLInsertBn </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">INSERT Business_</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(CURDATE()</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> VALUES('</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> vinBnCode </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">', </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(vinAccountID) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(vinCashMoney) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, 0, '</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(CURDATE()</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">', 5, '</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> vinBnProcessor </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">', '')</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    PREPARE dynSQL FROM @vSQLInsertBn;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    EXECUTE dynSQL;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    DEALLOCATE PREPARE dynSQL;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    END;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />END IF;        <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />COMMIT;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />END$$<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DELIMITER ;$$</span>
		</div>
		<p> </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.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">DELIMITER $$;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DROP PROCEDURE IF EXISTS `silvermoney`.`ChargeSilverCard`$$<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />CREATE PROCEDURE `ChargeSilverCard`(vinCardID VARCHAR(</span>
				<span style="COLOR: #000000">32</span>
				<span style="COLOR: #000000">), vinPassword VARCHAR(</span>
				<span style="COLOR: #000000">32</span>
				<span style="COLOR: #000000">), vinBnCode VARCHAR(</span>
				<span style="COLOR: #000000">32</span>
				<span style="COLOR: #000000">), vinBnProcessor VARCHAR(</span>
				<span style="COLOR: #000000">32</span>
				<span style="COLOR: #000000">), vinAccountID INT, OUT vErrCode INT)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />st_main : BEGIN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DECLARE varCardMoney BIGINT;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DECLARE varOrgBnCode VARCHAR(</span>
				<span style="COLOR: #000000">32</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DECLARE varBnTableName VARCHAR(</span>
				<span style="COLOR: #000000">32</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DECLARE vSQLInsertBn VARCHAR(</span>
				<span style="COLOR: #000000">256</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />SELECT Money, BusinessCode INTO varCardMoney, varOrgBnCode From SilverCard WHERE CardID</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">vinCardID AND Password</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">vinPassword;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />IF FOUND_ROWS() </span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000"> THEN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />   SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />   LEAVE st_main;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />END IF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />IF varOrgBnCode </span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000"> NULL THEN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />   SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">2</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />   LEAVE st_main;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />END IF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />START TRANSACTION;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />          <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />UPDATE SilverCard SET BusinessCode</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">vinBnCode WHERE CardID</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">vinCardID;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />IF ROW_COUNT() </span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000"> THEN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">3</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    LEAVE st_main;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />END IF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />UPDATE SilverAccount SET CashMoney</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">CashMoney</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">varCardMoney WHERE AccountID</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">vinAccountID;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />IF ROW_COUNT() </span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000"> THEN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">4</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    LEAVE st_main;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />END IF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />BEGIN<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DECLARE EXIT HANDLER FOR SQLEXCEPTION SET vErrCode </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">27</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />SET @vSQLInsertBn </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">INSERT Business_</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(CURDATE()</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> VALUES('</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> vinBnCode </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">', </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(vinAccountID) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(varCardMoney) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, 0, '</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> CONCAT(CURDATE()</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">', 6, '</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> vinBnProcessor </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">', '</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> vinCardID </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">')</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />PREPARE dynSQL FROM @vSQLInsertBn;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />EXECUTE dynSQL;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DEALLOCATE PREPARE dynSQL;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />END;     <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />COMMIT;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />END$$<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />DELIMITER ;$$</span>
		</div>
		<p> </p>
		<p> </p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/13130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-07-01 15:38 <a href="http://www.cnitblog.com/linghuye/archive/2006/07/01/13130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>M$ SQL的问题</title><link>http://www.cnitblog.com/linghuye/archive/2006/06/29/13070.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 29 Jun 2006 09:29:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/06/29/13070.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/13070.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/06/29/13070.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/13070.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/13070.html</trackback:ping><description><![CDATA[
		<p>最近用M$ SQL的遇到些问题,总结一下.</p>
		<p>1.使用ADO读出的BIGINT字段类型,形成的VARIANT是VT_DECIMAL类型,而非想象中的VT_I8.更要命的是VariantChangeType在Win2000下转换VT_DECIMAL-&gt;VT_I8或反之,都出错,该API返回错误的数据类型,而WinXP和Win2003下不会.结论是Win2000内核对VT_I8支持有误,当前SP4仍为解决该问题.Bae, Hyun-jik给出一个hack绕过该问题. Refer to: <br /><a href="http://groups.google.com/group/microsoft.public.data.oledb/browse_thread/thread/3ba6ff6e76186d95/c89a98d77a8fdb52?lnk=st&amp;q=vt_decimal+to+vt_i8&amp;rnum=1&amp;hl=zh-CN#c89a98d77a8fdb52"><font color="#ffff00">http://groups.google.com/group/microsoft.public.data.oledb/browse_thread/thread/3ba6ff6e76186d95/c89a98d77a8fdb52?lnk=st&amp;q=vt_decimal+to+vt_i8&amp;rnum=1&amp;hl=zh-CN#c89a98d77a8fdb52</font></a><br /><a href="http://groups.google.com/group/microsoft.public.win32.programmer.ole/browse_thread/thread/ee793c37192460d8/3f3ca1b412620ac6?lnk=st&amp;q=vt_decimal+to+vt_i8&amp;rnum=2&amp;hl=zh-CN#3f3ca1b412620ac6"><font color="#ffff00">http://groups.google.com/group/microsoft.public.win32.programmer.ole/browse_thread/thread/ee793c37192460d8/3f3ca1b412620ac6?lnk=st&amp;q=vt_decimal+to+vt_i8&amp;rnum=2&amp;hl=zh-CN#3f3ca1b412620ac6</font></a></p>
		<p>2.不能在SQL查询分析器下,选择文本的状态下,然后F5执行查询,执行的是选择文本.偶不知道,检查了4个小时的语法后发现的.</p>
		<p>3.ADO的Command对象带参数存储过程调用方式真低能,一个一个Parameter对象地创建,设置,赋值,这样的方式写出的都是垃圾代码.<br />改用adCmdText方式直接进行SQL语法调用EXECUTE procname @varInput,却无法从ADO的Command对象中取得返回值,于是被逼使用SELECT ErrCode = 1记录集返回.这样,对于复杂的存储过程中间多次进行出错返回的,出现多个SELECT语句,此时ADO将返回的一个多数据集对象,其中只有一个为打开,其他均为关闭,(奇怪的逻辑),于是有如下丑陋的代码:<br />int ExecuteStoreProcedure(const char* szSQL)<br />{<br /> try<br /> { <br />  _variant_t vRecords;<br />  _RecordsetPtr ptrRcs = m_ptrConnection-&gt;Execute(_bstr_t(szSQL), &amp;vRecords, adOptionUnspecified);<br />  while(ptrRcs != NULL)<br />  { <br />   if(ptrRcs-&gt;GetState() == adStateOpen)<br />   {<br />    return ptrRcs-&gt;GetFields()-&gt;GetItem("ErrCode")-&gt;GetValue();<br />   }<br />   ptrRcs = ptrRcs-&gt;NextRecordset(&amp;vRecords);<br />  }<br />  return ERROR_UNKNOWN;<br /> }<br /> catch(_com_error&amp; e)<br /> { <br />  _bstr_t bstrErrMsg = e.Description();<br />  DUMP_COM_ERROR(e);<br />  return ERROR_UNKNOWN;<br /> }<br /> catch(...)<br /> {<br />  return ERROR_UNKNOWN;<br /> }<br />}</p>
		<p>只是不知有没更简单的方法取回存储过程的return值,在使用直接SQL执行调用的方式下!<br />推荐大家使用MYSQL.</p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/13070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-06-29 17:29 <a href="http://www.cnitblog.com/linghuye/archive/2006/06/29/13070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>按段落读取RTF富文本格式文件内容</title><link>http://www.cnitblog.com/linghuye/archive/2006/06/29/13036.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 29 Jun 2006 03:14:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/06/29/13036.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/13036.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/06/29/13036.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/13036.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/13036.html</trackback:ping><description><![CDATA[最近写游戏公告服务器,需要按分段落读取RTF格式文本文件内容到内存中,然后下发客户端.<br />网络上没找到类似功能的代码,费了些功夫研究了一下,感觉在Windows下写些自由度较大的功能都像是在做hack.<br /><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"><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 创建一个临时RichEdit控件</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">HMODULE hInstRich </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::LoadLibrary(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">RICHED20.DLL</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />ATLASSERT(hInstRich </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> NULL);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />CRichEditCtrl ctrlRichEdit;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />ctrlRichEdit.Create(NULL, NULL, NULL, WS_POPUP </span><span style="COLOR: #000000">|</span><span style="COLOR: #000000"> ES_MULTILINE);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 取得ITextDocument接口</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">IRichEditOle</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pRichEditOle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ctrlRichEdit.GetOleInterface();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">pRichEditOle) </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />ITextDocument</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pRichDoc </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />pRichEditOle</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">QueryInterface(__uuidof(ITextDocument), (LPVOID</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pRichDoc);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />SAFE_RELEASE(pRichEditOle);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">pRichDoc) </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 打开RTF文件</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">CComVariant varFileName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> szFileName;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />HRESULT hr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pRichDoc</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Open(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">varFileName, tomReadOnly </span><span style="COLOR: #000000">|</span><span style="COLOR: #000000"> tomRTF, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(FAILED(hr))<br /><img id="Codehighlighter1_606_648_Open_Image" onclick="this.style.display='none'; Codehighlighter1_606_648_Open_Text.style.display='none'; Codehighlighter1_606_648_Closed_Image.style.display='inline'; Codehighlighter1_606_648_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_606_648_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_606_648_Closed_Text.style.display='none'; Codehighlighter1_606_648_Open_Image.style.display='inline'; Codehighlighter1_606_648_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_606_648_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_606_648_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    SAFE_RELEASE(pRichDoc);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 读取RTF文件</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">CIntArray arrParas;            <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />arrParas.push_back(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 分析文章每个段的位置</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> lineCount </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ctrlRichEdit.GetLineCount();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> lineCount; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_803_1243_Open_Image" onclick="this.style.display='none'; Codehighlighter1_803_1243_Open_Text.style.display='none'; Codehighlighter1_803_1243_Closed_Image.style.display='inline'; Codehighlighter1_803_1243_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_803_1243_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_803_1243_Closed_Text.style.display='none'; Codehighlighter1_803_1243_Open_Image.style.display='inline'; Codehighlighter1_803_1243_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_803_1243_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_803_1243_Open_Text"><span style="COLOR: #000000">{    <br /><img id="Codehighlighter1_829_833_Open_Image" onclick="this.style.display='none'; Codehighlighter1_829_833_Open_Text.style.display='none'; Codehighlighter1_829_833_Closed_Image.style.display='inline'; Codehighlighter1_829_833_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_829_833_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_829_833_Closed_Text.style.display='none'; Codehighlighter1_829_833_Open_Image.style.display='inline'; Codehighlighter1_829_833_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> szLineText[</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_829_833_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_829_833_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"> }</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> nLineBeginCharIndex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ctrlRichEdit.LineIndex(i);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 行首CharIndex</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> nLineLength </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ctrlRichEdit.LineLength(nLineBeginCharIndex);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(nLineLength </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)  </span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> nLineEndCharIndex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> nLineBeginCharIndex </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> nLineLength;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 行末CharIndex</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    ctrlRichEdit.GetTextRange(nLineEndCharIndex, nLineEndCharIndex </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, szLineText);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(szLineText[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\r</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">) <br /><img id="Codehighlighter1_1192_1241_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1192_1241_Open_Text.style.display='none'; Codehighlighter1_1192_1241_Closed_Image.style.display='inline'; Codehighlighter1_1192_1241_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1192_1241_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1192_1241_Closed_Text.style.display='none'; Codehighlighter1_1192_1241_Open_Image.style.display='inline'; Codehighlighter1_1192_1241_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_1192_1241_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_1192_1241_Open_Text"><span style="COLOR: #000000">{    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        arrParas.push_back(nLineEndCharIndex </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 读取每个段的内容到内存</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_1280_1357_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1280_1357_Open_Text.style.display='none'; Codehighlighter1_1280_1357_Closed_Image.style.display='inline'; Codehighlighter1_1280_1357_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1280_1357_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1280_1357_Closed_Text.style.display='none'; Codehighlighter1_1280_1357_Open_Image.style.display='inline'; Codehighlighter1_1280_1357_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #000000">FORMATETC fmtEtc </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_1280_1357_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_1280_1357_Open_Text"><span style="COLOR: #000000">{ RegisterClipboardFormat(CF_RTF), NULL, DVASPECT_CONTENT, </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, TYMED_HGLOBAL }</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(uint32 i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> arrParas.size() </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_1408_2281_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1408_2281_Open_Text.style.display='none'; Codehighlighter1_1408_2281_Closed_Image.style.display='inline'; Codehighlighter1_1408_2281_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1408_2281_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1408_2281_Closed_Text.style.display='none'; Codehighlighter1_1408_2281_Open_Image.style.display='inline'; Codehighlighter1_1408_2281_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1408_2281_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_1408_2281_Open_Text"><span style="COLOR: #000000">{    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    ITextRange</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pTextRange </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(SUCCEEDED(pRichDoc</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Range(arrParas[i], arrParas[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">], </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pTextRange))  </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">  pTextRange </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> NULL)<br /><img id="Codehighlighter1_1541_2279_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1541_2279_Open_Text.style.display='none'; Codehighlighter1_1541_2279_Closed_Image.style.display='inline'; Codehighlighter1_1541_2279_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1541_2279_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1541_2279_Closed_Text.style.display='none'; Codehighlighter1_1541_2279_Open_Image.style.display='inline'; Codehighlighter1_1541_2279_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_1541_2279_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_1541_2279_Open_Text"><span style="COLOR: #000000">{    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        CComVariant varDataObject;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        IDataObject</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pDataObject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        varDataObject.vt </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> VT_UNKNOWN </span><span style="COLOR: #000000">|</span><span style="COLOR: #000000"> VT_BYREF;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        varDataObject.ppunkVal </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (IUnknown</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pDataObject;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        hr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pTextRange</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Copy(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">varDataObject);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(SUCCEEDED(hr)  </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">  pDataObject </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> NULL)<br /><img id="Codehighlighter1_1796_2216_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1796_2216_Open_Text.style.display='none'; Codehighlighter1_1796_2216_Closed_Image.style.display='inline'; Codehighlighter1_1796_2216_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1796_2216_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1796_2216_Closed_Text.style.display='none'; Codehighlighter1_1796_2216_Open_Image.style.display='inline'; Codehighlighter1_1796_2216_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1796_2216_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_1796_2216_Open_Text"><span style="COLOR: #000000">{    <br /><img id="Codehighlighter1_1824_1843_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1824_1843_Open_Text.style.display='none'; Codehighlighter1_1824_1843_Closed_Image.style.display='inline'; Codehighlighter1_1824_1843_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1824_1843_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1824_1843_Closed_Text.style.display='none'; Codehighlighter1_1824_1843_Open_Image.style.display='inline'; Codehighlighter1_1824_1843_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            STGMEDIUM stgMedium </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_1824_1843_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_1824_1843_Open_Text"><span style="COLOR: #000000">{ TYMED_HGLOBAL, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"> }</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            hr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pDataObject</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetData(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">fmtEtc, </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">stgMedium);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(SUCCEEDED(hr)  </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">  stgMedium.hGlobal </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> NULL)<br /><img id="Codehighlighter1_1956_2212_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1956_2212_Open_Text.style.display='none'; Codehighlighter1_1956_2212_Closed_Image.style.display='inline'; Codehighlighter1_1956_2212_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1956_2212_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1956_2212_Closed_Text.style.display='none'; Codehighlighter1_1956_2212_Open_Image.style.display='inline'; Codehighlighter1_1956_2212_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span id="Codehighlighter1_1956_2212_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_1956_2212_Open_Text"><span style="COLOR: #000000">{    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                DWORD nLen </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::GlobalSize(stgMedium.hGlobal);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pData </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)::GlobalLock(stgMedium.hGlobal);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                CMemChunkBase chunk(nLen);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                chunk.WriteData(pData, nLen);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                m_arrSysMsgs.push_back(chunk);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                ::GlobalUnlock(pData);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        SAFE_RELEASE(pDataObject);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        SAFE_RELEASE(pTextRange);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />SAFE_RELEASE(pRichDoc);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />ctrlRichEdit.DestroyWindow();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />FreeLibrary(hInstRich);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />hInstRich </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;</span></div><img src ="http://www.cnitblog.com/linghuye/aggbug/13036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-06-29 11:14 <a href="http://www.cnitblog.com/linghuye/archive/2006/06/29/13036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用信号量控制程序的进程个数</title><link>http://www.cnitblog.com/linghuye/archive/2006/06/28/13012.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Wed, 28 Jun 2006 13:22:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/06/28/13012.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/13012.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/06/28/13012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/13012.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/13012.html</trackback:ping><description><![CDATA[
		<p>互斥量可以实现程序在系统内唯一进程,所以,同理,信号量可以用来控制一个程序的进程的个数,获知一个程序当前被运行了几个实例进程.<br />LONG nPreCount = 0; // 程序当前运行了几个进程实例<br />HANDLE hSemaphore = ::CreateSemaphore(NULL, 1, 16, "__DM_EASY_TEST_COUNT__");<br />ReleaseSemaphore(hSemaphore, 1, &amp;nPreCount); </p>
		<p>测试网络游戏时,可以用它来生成按程序打开顺序的用户帐号,如测试帐号111,222,333<br />m_idLocalAccount = nPreCount * 100 + nPreCount * 10 + nPreCount;<br /></p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/13012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-06-28 21:22 <a href="http://www.cnitblog.com/linghuye/archive/2006/06/28/13012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>抢占IE状态栏</title><link>http://www.cnitblog.com/linghuye/archive/2006/05/25/11040.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 25 May 2006 05:39:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/05/25/11040.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/11040.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/05/25/11040.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/11040.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/11040.html</trackback:ping><description><![CDATA[Google Notebook那个在IE状态栏上加的图标很有意思,我研究了一下发现被蒙了,那个按钮根本不是在状态栏上,而是个完全浮动的窗口.于是我学着作了一个.<br /><br />Source Code:<br /><a href="/Files/linghuye/MyNoteBook.rar"><font color="#ffff00">http://www.cnitblog.com/Files/linghuye/MyNoteBook.rar</font></a><br /><br />使用Release目录里的RegMyNoteBook.bat注册<br /><img src="http://www.linghuye.nease.net/Pic/Nbs.JPG" /><img src ="http://www.cnitblog.com/linghuye/aggbug/11040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-05-25 13:39 <a href="http://www.cnitblog.com/linghuye/archive/2006/05/25/11040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>被一根数据线整得死去活来</title><link>http://www.cnitblog.com/linghuye/archive/2006/04/28/9831.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Fri, 28 Apr 2006 02:14:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/04/28/9831.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/9831.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/04/28/9831.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/9831.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/9831.html</trackback:ping><description><![CDATA[
		<p>最近两周都在修复计算机,真是衰透了.</p>
		<p>最终追其根由只是硬盘数据线坏了,但现象却是Windows启动时报告pci.sys文件被破坏,而重装Windows,安装程序在一开始检查硬盘时就报告一个unexpected error,连故障控制台都进不去.</p>
		<p>于是把我吓的魂都没了,认定硬盘坏了,马上光盘启动,使用了一大堆的硬盘修复工具,一个一个试过去,Partition Magic报告硬盘严重错误,句柄错误,更新序列错误,一堆的错误.</p>
		<p>最奇怪的是在纯Dos下加载NTFS驱动后,又都能看见所有的盘里的数据,于是决定先恢复数据要紧.使用另一台机器,使用硬盘盒外挂这块硬盘,认出了所有数据,欣喜若狂,然而在转移备份完程序源码数据后,所有的分区突然都出现了"文件或目录损坏且无法读取"现象,试了多个工具后,最后EasyRecovery成功地恢复了大部份的数据,但无法恢复其中一个游戏分区的数据.200G的硬盘数据恢复啊,几个通宵的运行.</p>
		<p>然后准备开始低格硬盘时突然发现,在新机器上对硬盘安装Windows都没有报错,而一放到原机器就报错,于是拆内存,拆网卡,显卡,最后拆到硬盘数据线,换了一根后,安装程序通过了.</p>
		<p>于是我开始吐血,吐完了流着泪开始回导数据.</p>
		<p>经历过了太多的苦恼和烦闷,我于是养成一种习惯,在苦闷时总是以外观者的心态俯视且怜悯着挣扎的自我,嘲讽着自我.</p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/9831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-04-28 10:14 <a href="http://www.cnitblog.com/linghuye/archive/2006/04/28/9831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ffmpeg的编译</title><link>http://www.cnitblog.com/linghuye/archive/2006/04/01/8453.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Fri, 31 Mar 2006 16:25:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/04/01/8453.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/8453.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/04/01/8453.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/8453.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/8453.html</trackback:ping><description><![CDATA[
		<p>最近耗费了些时间捣鼓ffmpeg影像播放,个人是Linux和开源运动的忠实追随者,但却很少在linux下编程,因为实在讨厌那个命令行的make编译,操作繁琐,我又经常打错字,要花大量时间捣鼓那些./configure,实在不适合我这种懒人.</p>
		<p>Linux下的make都是又臭又长,而且搞不懂为什么编译出的东西关联都那么多,目标文件又大,ffmpeg默认编译生成8M多的dll,使用如下./configure,支持各种MPEG4格式.</p>
		<p>./configure  --disable-static --enable-shared --enable-memalign-hack --disable-encoders --disable-debug --disable-audio-oss --disable-audio-beos --disable-v4l --disable-v4l2 --disable-bktr --disable-dv1394 --disable-network --disable-lzo --disable-zlib --disable-simple_idct --disable-vhook --disable-muxers --disable-mpegaudio-hp --disable-ffserver --disable-ffplay --disable-decoders --enable-small --enable-decoder=MPEG4 --enable-decoder=SNOW --enable-decoder=MSMPEG4V1 --enable-decoder=MSMPEG4V2 --enable-decoder=MSMPEG4V3</p>
		<p>编译完avcodec.dll仍然有1.06M(不知有谁能编译出支持MPEG4的更小的版本),只支持MPEG4格式,用Aspack压缩一下354k,这样的DLL才可以用,虽然结果简单,但没有文档,捣鼓这些参数浪费了大量时间,真是不值得.另外,很烦别人问我程序的编译问题,繁琐而没有多少技术含量,纯粹的体力活.最后为了找一个影片开始播放时会出现马赛克的Bug,修改ffplay.c,做了个VC下可以调试编译的版本,和我的程序做对比,最后调试发现av_read_packet的解码有问题,改成av_read_frame了事,结果是就只改了几个字母解决了Bug,过程却相当的痛苦.</p>
		<p>研究的副产品是发现TortoiseCVS这个CVS工具很好用,集成入Windows Shell,而WinCVS表面是Windows GUI,骨子里仍然是Linux的繁琐,状态栏那几条死鱼说明了一切.又发现了Fraps这个游戏视频捕捉工具,直接截获游戏目标画面,显示游戏帧数,直接捕捉显卡内容录制avi,cool!</p>
		<p>Linux下的东西就比Windows有技术含量么,我看未必.</p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/8453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-04-01 00:25 <a href="http://www.cnitblog.com/linghuye/archive/2006/04/01/8453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>建立在TCP SOCKET上的完成端口的问题</title><link>http://www.cnitblog.com/linghuye/archive/2006/02/02/6422.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 02 Feb 2006 13:02:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/02/02/6422.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/6422.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/02/02/6422.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/6422.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/6422.html</trackback:ping><description><![CDATA[假设对该Socket依序连续发起两次以上的异步写操作,即发送数据,最终数据是否按顺序发出,客户端是否能按顺序收到数据?<br />1.书本的理论上异步IO操作不保证完成的顺序性.<br />2.实际测试运行数据消息是按序收到的,但实践没有100%的理论逻辑保证,程序有逻辑上的崩溃可能.<br />3.如果不能对TCP Socket进行连续异步写数据,且保证最终是有序的发送,那么Socket的异步完成端口没有实用价值.如果要等上次异步写操作完成,才能发送第2个数据,同步方式的方案最佳.完成端口的优势仅在其流量上.<br />4.假设用一个for循环连续发起1000次以上的异步写操作,意味着大量的系统资源被耗用,对服务器而言几千次很平常.<br /><br />研究碰撞反应受阻,只好想些知识极限范围内的问题.<br /><br />补:<br />发送顺序肯定和投递顺序一致的，这个是系统保证的，但完成通知的次序是不保证和投递次序一致的。- WINDOWS网络编程(第2版)<br /><br />// 下段摘自网络论坛<br />其实在使用IOCP的时候，为每个SOCKET连接建立一个发送队列，发完一个包后才发第2个，这样从单个SOCKET来看，是成了阻塞的，但是从整个系统来看，比如你有1万个连接，那么对于单个连接来说，是不是组塞的问题都不大。因为当连接数多了后，你考虑的问题不是单个SOCKET要有多块，而是系统资源和带宽如何平均地分配给这么多个连接。<img src ="http://www.cnitblog.com/linghuye/aggbug/6422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-02-02 21:02 <a href="http://www.cnitblog.com/linghuye/archive/2006/02/02/6422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACE 概念</title><link>http://www.cnitblog.com/linghuye/archive/2006/01/28/6388.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 28 Jan 2006 04:15:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/01/28/6388.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/6388.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/01/28/6388.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/6388.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/6388.html</trackback:ping><description><![CDATA[<P>1.ACE主分2个概念群,基础模块和应用框架.卷1论述基础模块,卷2论述应用框架.采用模板的理念,使用基础模块类对应用框架类进行配置.<BR><BR>2.连接和通信的解藕.Acceptor/Connector -&gt; SvcHandle&nbsp;<BR><BR>3.用7zip压缩源ace源代码形成2.86M的包,比rar的5.86M小了一倍,cool.<BR><BR>4.a.同步的多线程,多线程编程给软件带来的复杂度是量级上的,能避免就避免.<BR>&nbsp; 2.单线程反应式编程,同步反应,逻辑简单明确.<BR>&nbsp; 3.前摄器IO同步,由操作系统完成异步,优雅的逻辑,但仍显复杂,带来的好处也是很大<BR><BR>5.ACE的构架仍显过于地臃肿复杂,模式痕迹过重,不够小巧,以手工编码的TCP客户端编译28K,使用ACE框架的186K,差不多为6.5倍,为跨平台和灵活性付出了相当的代价.<BR>6.前摄式和反应式天生本质逻辑的不兼容,使得Reactor和Proactor不能通过简单的代码配置进行变换,由于Proactor在逻辑上要求的更加灵活,使得Reactor这种强框架概念不再适应,Proactor在框架概念上变弱,但使得类交互更加复杂.<BR>7.在框架方面对无连接协议UDP不兼容,使得框架的威力大减.<BR>8.ACE中轻量级类很好用,简单且跨平台.<BR>9.ACE_Message_Block很显然不能声明为堆栈或静态对象,只能在堆上创建,且没有编译时强制,这不好,程序员会写出完全错误的代码.<BR></P><img src ="http://www.cnitblog.com/linghuye/aggbug/6388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-01-28 12:15 <a href="http://www.cnitblog.com/linghuye/archive/2006/01/28/6388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Compiler warning</title><link>http://www.cnitblog.com/linghuye/archive/2006/01/27/6383.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Fri, 27 Jan 2006 06:42:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/01/27/6383.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/6383.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/01/27/6383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/6383.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/6383.html</trackback:ping><description><![CDATA[
		<p>1.Wp64检测64位可移植性问题,导致warning( 4244,4267,4311,4312)<br />2.链接器 -&gt; 优化 -&gt; Windows98优化 去除,可省十几k.<br />3.msvcp60.dll和 msvcp71.dll是使用vc标准库时被连入的,即使使用了一个函数,也需要发布几百k的dll,非常的讨厌.对于Vc.net2003可以使用#define _STATIC_CPPLIB静态链接msvcrp.dll,消除dll引用.VC6需要改动内部实现代码,没有好的解决手法.若一个静态库使用了_STATIC_CPPLIB,所有使用该静态库的程序必须也使用_STATIC_CPPLIB,否则链接出错(链接纯C库没有这个问题).应该保证让_STATIC_CPPLIB作用到所有使用到c++标准库的cpp文件.<br />4.程序无法启动,编译新旧文件杂揉原因导致C库混乱,如应当编译出错的文件被编译过了.<br /><br />5.Solid_D.lib(BP_Scene.obj) : warning LNK4204: “f:\Gamedev\Objs\DestinyMatrix\D\vc70.pdb”缺少引用模块的调试信息；正在链接对象，如同没有调试信息一样<br />Solid_D.lib(BP_Scene.obj) : warning LNK4204: 'f:\Gamedev\Objs\DestinyMatrix\D\vc70.pdb' is missing debugging information for referencing module; linking object as if no debug info</p>
		<p>LNK4204是个很含糊的warning,也很讨厌.MSDN上说是f:\Gamedev\Objs\DestinyMatrix\D\vc70.pdb文件是损坏的,要求重编,谬之甚已.上文的实际意思是找不到Solid_D.lib编译对应的vc70.pdb,比如Solid工程被Clean了.Solid_D.lib里有其对应的vc70.pdb的绝对路径,所以Solid_D.lib可以被复制到任何工程目录,而调试时IDE能找到lib对应的调试信息.一旦其对齐的vc70.pdb被删除就出现LNK2404.<br />IDE的工程Clean也有问题,它的Clean不是严格Clean指定工程的中间文件,而是Clean掉工程的中间目录,如果设定多个项目的中间目录为一个目录,且相互依耐,编译就会出现问题,编译完全紊乱.特别是vc70.pdb只剩下最后一个被编译的工程的.<br /><br />copy "$(TargetPath)" F:\Gamedev\Libs\<br />中间有空格的TargetPath要加上"",否则空格导致copy失败</p>
<img src ="http://www.cnitblog.com/linghuye/aggbug/6383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-01-27 14:42 <a href="http://www.cnitblog.com/linghuye/archive/2006/01/27/6383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序之衰</title><link>http://www.cnitblog.com/linghuye/archive/2006/01/26/6372.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 26 Jan 2006 09:44:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/01/26/6372.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/6372.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/01/26/6372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/6372.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/6372.html</trackback:ping><description><![CDATA[<P>在一类构造函数中m_nLen = 0;这样一条初始赋值语句运行后,在我眼皮子底下,朗朗乾坤,光天化日下,m_nLen竟然仍然等于0xcdcdcdcd,赋值语句无效!!!<BR>Clean工程,删除中间文件,重启机器,重装Vc6, m_nLen仍然死活不能赋值为0,吐血五升,天龙五衰之兆啊.</P>
<P>折腾了一整天后,终于发现,是预编译文件stdafx.h,stdafx.cpp,及m_nLen=0;所在cpp的预编译配置有些小问题.使用automaticlly use of precomopile file竟然会出现这种毫无因果的问题,真是衰透了.<BR>改成使用指定的stdafx.h预编译头文件了事.<BR><BR>不由哀之,生活中亦凡有此种Bug,毫无因果,却足以让你为之付出沉重的代价.人生之不堪承受也如是.</P><img src ="http://www.cnitblog.com/linghuye/aggbug/6372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-01-26 17:44 <a href="http://www.cnitblog.com/linghuye/archive/2006/01/26/6372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LuaShell</title><link>http://www.cnitblog.com/linghuye/archive/2006/01/07/6075.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 07 Jan 2006 11:50:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2006/01/07/6075.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/6075.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2006/01/07/6075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/6075.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/6075.html</trackback:ping><description><![CDATA[无聊的时候写了个执行Lua脚本的Shell Context Menu.<br />1.使用内含的RegisterShellMenu.bat文件进行Shell DLL插件注册.<br />2.任意选择一个.lua后缀文件,在其右键单击快捷菜单中选择Run Lua Script命令. <br />3.有语法错误的会报错,正确执行的会输出脚本中所有的print函数调用到对话框上。<br />4.支持到luaopen_base,luaopen_table,luaopen_string,luaopen_math,luaopen_io,不能把dll放到中文目录下.<br />5.用来做一些方便的Lua脚本Widget不错.<br />6.1.20:加入lua扩展支持:Windows API,Zip,COM,odbc,mysql,wxWidgets GUI. <br />7.1.22加入OpenGL支持.<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"><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">--</span><span style="COLOR: #000000"> Load package<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />function LoadPackage(pname, fname)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    local gf, err </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> loadlib(pname, fname or (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">luaopen_</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> .. pname));<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(gf) then gf();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> error(err) end;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />end<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">--**************************************************************</span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />LoadPackage(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">zip</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />local zfile, err </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> zip.open(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">C:\\view.zip</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> file </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> zfile:files() </span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    print(file.filename);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />end<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />zfile:close();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*************************************************************</span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />LoadPackage(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">odbc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">luaopen_luasqlodbc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />local env </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> assert(luasql.odbc());<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />local conn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> assert(env:connect(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">nwind</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />local cur </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> conn:execute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SELECT * FROM Customers</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cur) then<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    print(table.concat(cur:getcolnames(), </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    <br /><img id="Codehighlighter1_683_684_Open_Image" onclick="this.style.display='none'; Codehighlighter1_683_684_Open_Text.style.display='none'; Codehighlighter1_683_684_Closed_Image.style.display='inline'; Codehighlighter1_683_684_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_683_684_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_683_684_Closed_Text.style.display='none'; Codehighlighter1_683_684_Open_Image.style.display='inline'; Codehighlighter1_683_684_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    local data </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_683_684_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_683_684_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    cur:fetch(data);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    print(table.concat(data, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />end<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />cur:close();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />conn:close();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />env:close();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*************************************************************</span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />LoadPackage(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">mysql</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">luaopen_luasqlmysql</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />local env </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> assert(luasql.mysql());<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />local conn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> assert(env:connect(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">wow</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">linghuye</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">yzwzsq</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />local cur </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> conn:execute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SELECT * FROM creature_names</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cur) then<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    print(table.concat(cur:getcolnames(), </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    <br /><img id="Codehighlighter1_1131_1132_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1131_1132_Open_Text.style.display='none'; Codehighlighter1_1131_1132_Closed_Image.style.display='inline'; Codehighlighter1_1131_1132_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1131_1132_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1131_1132_Closed_Text.style.display='none'; Codehighlighter1_1131_1132_Open_Image.style.display='inline'; Codehighlighter1_1131_1132_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    local data </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_1131_1132_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.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_1131_1132_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    cur:fetch(data);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    print(table.concat(data, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />end<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />cur:close();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />conn:close();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />env:close();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*************************************************************</span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />LoadPackage(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">lfs</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />local attrs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> lfs.attributes(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">C:\\view.zip</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />print(attrs.size);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />print(lfs.currentdir());<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><a class="" title="" href="/Files/linghuye/LuaShell.7z.rar" target=""><font color="#ffff00">http://www.cnitblog.com/Files/linghuye/LuaShell.7z.rar</font></a><br /><img src ="http://www.cnitblog.com/linghuye/aggbug/6075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2006-01-07 19:50 <a href="http://www.cnitblog.com/linghuye/archive/2006/01/07/6075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>罕见却实用的C语言技巧</title><link>http://www.cnitblog.com/linghuye/archive/2005/12/31/5936.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 31 Dec 2005 03:26:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/12/31/5936.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/5936.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/12/31/5936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/5936.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/5936.html</trackback:ping><description><![CDATA[1.SOLID的基本vector类型为:&nbsp;&nbsp; typedef DT_Scalar DT_Vector3[3]; <br>很有意思地定义DT_Vector3为一个三元组,这样:<br>a.DT_Vector3声明变量时,可以定义三元组.<br>b.DT_Vector3作为函数参数时,却可以直接传入float指针进行调用.而在C++中一般用类型强转运算符实现. <br><br>2.&nbsp;t_MyStruct p[10] = { 0 }; t_MyStruct 是个c结构, = {0},可以用0初始化*整个*结构数组,很好用.
<img src ="http://www.cnitblog.com/linghuye/aggbug/5936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-12-31 11:26 <a href="http://www.cnitblog.com/linghuye/archive/2005/12/31/5936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口继承下的实现继承</title><link>http://www.cnitblog.com/linghuye/archive/2005/12/12/5314.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Mon, 12 Dec 2005 08:47:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/12/12/5314.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/5314.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/12/12/5314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/5314.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/5314.html</trackback:ping><description><![CDATA[这种C++技法最先学自ATL的架构,而后却总是记不住,备之.<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"><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;DmGameCamera;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">struct</SPAN><SPAN style="COLOR: #000000">&nbsp;ISceneNode<BR><IMG id=Codehighlighter1_38_373_Open_Image onclick="this.style.display='none'; Codehighlighter1_38_373_Open_Text.style.display='none'; Codehighlighter1_38_373_Closed_Image.style.display='inline'; Codehighlighter1_38_373_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_38_373_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_373_Closed_Text.style.display='none'; Codehighlighter1_38_373_Open_Image.style.display='inline'; Codehighlighter1_38_373_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_38_373_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_38_373_Open_Text><SPAN style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Release()&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Render()&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;IsVisible()&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;RayPickup(</SPAN><SPAN style="COLOR: #0000ff">const</SPAN><SPAN style="COLOR: #000000">&nbsp;vec3_type</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;vBegin,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">const</SPAN><SPAN style="COLOR: #000000">&nbsp;vec3_type</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;vDir)&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;vec3_type&nbsp;getPositionToParent()&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;UpdateFrame(uint32&nbsp;time,&nbsp;DmGameCamera</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;camera)&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;AddChildSceneNode(ISceneNode</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;node)&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">struct</SPAN><SPAN style="COLOR: #000000">&nbsp;IModelSceneNode&nbsp;:&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;ISceneNode<BR><IMG id=Codehighlighter1_420_469_Open_Image onclick="this.style.display='none'; Codehighlighter1_420_469_Open_Text.style.display='none'; Codehighlighter1_420_469_Closed_Image.style.display='inline'; Codehighlighter1_420_469_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_420_469_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_420_469_Closed_Text.style.display='none'; Codehighlighter1_420_469_Open_Image.style.display='inline'; Codehighlighter1_420_469_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_420_469_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_420_469_Open_Text><SPAN style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">virtual</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;MakeVisible(</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;bVisible)&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>template</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;T,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;I&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;ISceneNode</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">struct</SPAN><SPAN style="COLOR: #000000">&nbsp;ISceneNodeImpl&nbsp;:&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;I<BR><IMG id=Codehighlighter1_546_960_Open_Image onclick="this.style.display='none'; Codehighlighter1_546_960_Open_Text.style.display='none'; Codehighlighter1_546_960_Closed_Image.style.display='inline'; Codehighlighter1_546_960_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_546_960_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_546_960_Closed_Text.style.display='none'; Codehighlighter1_546_960_Open_Image.style.display='inline'; Codehighlighter1_546_960_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_546_960_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_546_960_Open_Text><SPAN style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;UpdateFrame(uint32&nbsp;time,&nbsp;DmGameCamera</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;camera)<BR><IMG id=Codehighlighter1_603_606_Open_Image onclick="this.style.display='none'; Codehighlighter1_603_606_Open_Text.style.display='none'; Codehighlighter1_603_606_Closed_Image.style.display='inline'; Codehighlighter1_603_606_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_603_606_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_603_606_Closed_Text.style.display='none'; Codehighlighter1_603_606_Open_Image.style.display='inline'; Codehighlighter1_603_606_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_603_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_603_606_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;RayPickup(</SPAN><SPAN style="COLOR: #0000ff">const</SPAN><SPAN style="COLOR: #000000">&nbsp;vec3_type</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;vBegin,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">const</SPAN><SPAN style="COLOR: #000000">&nbsp;vec3_type</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;vDir)<BR><IMG id=Codehighlighter1_674_693_Open_Image onclick="this.style.display='none'; Codehighlighter1_674_693_Open_Text.style.display='none'; Codehighlighter1_674_693_Closed_Image.style.display='inline'; Codehighlighter1_674_693_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_674_693_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_674_693_Closed_Text.style.display='none'; Codehighlighter1_674_693_Open_Image.style.display='inline'; Codehighlighter1_674_693_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_674_693_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_674_693_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vec3_type&nbsp;getPositionToParent()&nbsp;<BR><IMG id=Codehighlighter1_733_766_Open_Image onclick="this.style.display='none'; Codehighlighter1_733_766_Open_Text.style.display='none'; Codehighlighter1_733_766_Closed_Image.style.display='inline'; Codehighlighter1_733_766_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_733_766_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_733_766_Closed_Text.style.display='none'; Codehighlighter1_733_766_Open_Image.style.display='inline'; Codehighlighter1_733_766_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_733_766_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_733_766_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;vec3_type(</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">);&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;AddChildSceneNode(ISceneNode</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;node)<BR><IMG id=Codehighlighter1_812_815_Open_Image onclick="this.style.display='none'; Codehighlighter1_812_815_Open_Text.style.display='none'; Codehighlighter1_812_815_Closed_Image.style.display='inline'; Codehighlighter1_812_815_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_812_815_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_812_815_Closed_Text.style.display='none'; Codehighlighter1_812_815_Open_Image.style.display='inline'; Codehighlighter1_812_815_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_812_815_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_812_815_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;IsVisible()<BR><IMG id=Codehighlighter1_838_857_Open_Image onclick="this.style.display='none'; Codehighlighter1_838_857_Open_Text.style.display='none'; Codehighlighter1_838_857_Closed_Image.style.display='inline'; Codehighlighter1_838_857_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_838_857_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_838_857_Closed_Text.style.display='none'; Codehighlighter1_838_857_Open_Image.style.display='inline'; Codehighlighter1_838_857_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_838_857_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_838_857_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Render()&nbsp;<BR><IMG id=Codehighlighter1_878_881_Open_Image onclick="this.style.display='none'; Codehighlighter1_878_881_Open_Text.style.display='none'; Codehighlighter1_878_881_Closed_Image.style.display='inline'; Codehighlighter1_878_881_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_878_881_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_878_881_Closed_Text.style.display='none'; Codehighlighter1_878_881_Open_Image.style.display='inline'; Codehighlighter1_878_881_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_878_881_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_878_881_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Release()&nbsp;<BR><IMG id=Codehighlighter1_903_958_Open_Image onclick="this.style.display='none'; Codehighlighter1_903_958_Open_Text.style.display='none'; Codehighlighter1_903_958_Closed_Image.style.display='inline'; Codehighlighter1_903_958_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_903_958_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_903_958_Closed_Text.style.display='none'; Codehighlighter1_903_958_Open_Image.style.display='inline'; Codehighlighter1_903_958_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_903_958_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_903_958_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;pThis&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;static_cast</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">*&gt;</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pThis;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>template</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">struct</SPAN><SPAN style="COLOR: #000000">&nbsp;IModelSceneNodeImpl&nbsp;:&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;ISceneNodeImpl</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T,&nbsp;IModelSceneNode</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG id=Codehighlighter1_1054_1207_Open_Image onclick="this.style.display='none'; Codehighlighter1_1054_1207_Open_Text.style.display='none'; Codehighlighter1_1054_1207_Closed_Image.style.display='inline'; Codehighlighter1_1054_1207_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_1054_1207_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1054_1207_Closed_Text.style.display='none'; Codehighlighter1_1054_1207_Open_Image.style.display='inline'; Codehighlighter1_1054_1207_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_1054_1207_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1054_1207_Open_Text><SPAN style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IModelSceneNodeImpl()<BR><IMG id=Codehighlighter1_1081_1109_Open_Image onclick="this.style.display='none'; Codehighlighter1_1081_1109_Open_Text.style.display='none'; Codehighlighter1_1081_1109_Closed_Image.style.display='inline'; Codehighlighter1_1081_1109_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1081_1109_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1081_1109_Closed_Text.style.display='none'; Codehighlighter1_1081_1109_Open_Image.style.display='inline'; Codehighlighter1_1081_1109_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1081_1109_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1081_1109_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_bOutOfCamera&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;MakeVisible(</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;bVisible)<BR><IMG id=Codehighlighter1_1147_1181_Open_Image onclick="this.style.display='none'; Codehighlighter1_1147_1181_Open_Text.style.display='none'; Codehighlighter1_1147_1181_Closed_Image.style.display='inline'; Codehighlighter1_1147_1181_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1147_1181_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1147_1181_Closed_Text.style.display='none'; Codehighlighter1_1147_1181_Open_Image.style.display='inline'; Codehighlighter1_1147_1181_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1147_1181_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.cnitblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1147_1181_Open_Text><SPAN style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_bOutOfCamera&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">bVisible;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;m_bOutOfCamera;<BR><IMG src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">;</SPAN></DIV><BR>关键在于将高级接口作为模板参数下传至基本接口的实现类模板.<img src ="http://www.cnitblog.com/linghuye/aggbug/5314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-12-12 16:47 <a href="http://www.cnitblog.com/linghuye/archive/2005/12/12/5314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单体对象行为守则</title><link>http://www.cnitblog.com/linghuye/archive/2005/11/17/4640.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Thu, 17 Nov 2005 13:30:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/11/17/4640.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/4640.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/11/17/4640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/4640.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/4640.html</trackback:ping><description><![CDATA[1.单体必须有Setup()和Destroy()函数<BR>2.单体不得在构造函数中分配资源,不得在析构中释放资源,应显式使用Setup和Destroy函数,注意Destroy函数要clear清空stl容器.<BR>3.内存检查器单体可以凌驾于此规定之上,不受约束.<BR>4.由于单体自身的释放由C++机制保证,所以内存检查器单体不用负责其他单体自身的释放问题.<BR>5.由于其他单体在内存检查器单体之前构造,必然在内存检查器单体之后析构,对内存检查器的逻辑无影响,所以允许其他单体在内存检查器单体之前构造,不保证或规定单体间的初始化顺序.<BR>6.由于强制Setup和Destroy的调用,内存检查器单体将严格监督其他单体在其内部的资源的分配释放出现的问题.<BR>7.一个2进制模块分配的内存不得在其他模块释放.<BR>8.内存检查器单体由程序员直接负责监督.<BR><BR>推论:<BR>1.如内存检查器单体报警则必有模块违反上述准则.<img src ="http://www.cnitblog.com/linghuye/aggbug/4640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-11-17 21:30 <a href="http://www.cnitblog.com/linghuye/archive/2005/11/17/4640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua编程低级错误</title><link>http://www.cnitblog.com/linghuye/archive/2005/10/28/3660.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Fri, 28 Oct 2005 12:19:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/10/28/3660.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/3660.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/10/28/3660.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/3660.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/3660.html</trackback:ping><description><![CDATA[<P>1.带有中文的lua教本没有保存成UTF8格式,导致中文字符串分析失败,太低级了.<BR>2.LuaEdit这个工具不错,至少可以调试,还能检查基本语法.可惜是Delphi写的,不知什么时候就崩溃.</P><img src ="http://www.cnitblog.com/linghuye/aggbug/3660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-10-28 20:19 <a href="http://www.cnitblog.com/linghuye/archive/2005/10/28/3660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>压缩算法</title><link>http://www.cnitblog.com/linghuye/archive/2005/10/08/3152.html</link><dc:creator>linghuye</dc:creator><author>linghuye</author><pubDate>Sat, 08 Oct 2005 13:44:00 GMT</pubDate><guid>http://www.cnitblog.com/linghuye/archive/2005/10/08/3152.html</guid><wfw:comment>http://www.cnitblog.com/linghuye/comments/3152.html</wfw:comment><comments>http://www.cnitblog.com/linghuye/archive/2005/10/08/3152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/linghuye/comments/commentRss/3152.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/linghuye/services/trackbacks/3152.html</trackback:ping><description><![CDATA[RLE:<A href="http://www.arturocampos.com/ac_rle.html"><FONT color=#ffff00>http://www.arturocampos.com/ac_rle.html</FONT></A><img src ="http://www.cnitblog.com/linghuye/aggbug/3152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/linghuye/" target="_blank">linghuye</a> 2005-10-08 21:44 <a href="http://www.cnitblog.com/linghuye/archive/2005/10/08/3152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>