﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-cloud</title><link>http://www.cppblog.com/cloud/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 10:56:15 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 10:56:15 GMT</pubDate><ttl>60</ttl><item><title>erlang 在windows运行出现system_limit的解决方法</title><link>http://www.cppblog.com/cloud/archive/2010/08/11/123080.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Wed, 11 Aug 2010 08:54:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2010/08/11/123080.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/123080.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2010/08/11/123080.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/123080.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/123080.html</trackback:ping><description><![CDATA[<font  color="#555555" face="Verdana, 'BitStream vera Sans', Helvetica, sans-serif" size="3"><span  style="font-size: 12px; line-height: 17px;">采用这种形式即可突破限制: erl -env ERL_MAX_PORTS 2048</span></font><img src ="http://www.cppblog.com/cloud/aggbug/123080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2010-08-11 16:54 <a href="http://www.cppblog.com/cloud/archive/2010/08/11/123080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>充分利用c/c++中的宏</title><link>http://www.cppblog.com/cloud/archive/2008/12/05/68628.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Fri, 05 Dec 2008 02:49:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2008/12/05/68628.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/68628.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2008/12/05/68628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/68628.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/68628.html</trackback:ping><description><![CDATA[c/c++中的宏不是语法中的一部分， 是在编译器开始编译之前的一种文本替换行为， 因此可以利用c/c++中的编译器中的选项来预处理其他没有预处理功能的语言<br><br>比如， 利用微软的cl.exe 编译器来预处理文本， 命令： cl.exe /EP test.vb<br>这样如果test.vb中有类似#define 的语句， 会被删除， 而后一些用到该宏的地方， 会被真实的值替换
<img src ="http://www.cppblog.com/cloud/aggbug/68628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2008-12-05 10:49 <a href="http://www.cppblog.com/cloud/archive/2008/12/05/68628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>google的protobuf值得关注</title><link>http://www.cppblog.com/cloud/archive/2008/11/14/66919.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Fri, 14 Nov 2008 07:01:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2008/11/14/66919.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/66919.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2008/11/14/66919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/66919.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/66919.html</trackback:ping><description><![CDATA[<span  style="font-family: 'lucida grande'; font-size: 11px; white-space: pre; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">google的protobuf是一个对结构的序列化和反序列化的中间语言， 可以跨多个语言使用， 值得关注</span><img src ="http://www.cppblog.com/cloud/aggbug/66919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2008-11-14 15:01 <a href="http://www.cppblog.com/cloud/archive/2008/11/14/66919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】高效的XML——XDS</title><link>http://www.cppblog.com/cloud/archive/2008/11/12/66725.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Wed, 12 Nov 2008 07:34:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2008/11/12/66725.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/66725.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2008/11/12/66725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/66725.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/66725.html</trackback:ping><description><![CDATA[<div>&#160;&#160; &#160;最近在游戏编程精粹4(Game Programming Gems 4)中看到了对于XDS的介绍，解开了我对于XML低效的困惑。也许在小型的XML应用中不觉得，但是在大数据量的应用中XML的速度甚至无法和普通的.ini相提并论。首先让我们来看看XDS是什么吧。</div><div>&#160;</div><div>&#160;&#160; &#160;XDS技术由DSD和XDS两种文件格式组成。前者跟XSD相似，后者跟XML相似，只不过这两种格式都是二进制的。正是采用了二进制格式，无论是在体积还是在速度上XDS的性能比XML都有明显的提升。目前支持XDS的免费库主要有XDSToolkit，现在可以下载到1.03版本。这是一个开源项目，解压后我们可以看到它由两个工具一个API包组成，另外还附一个例子。两个工具的名字分别叫做xdsConvert和xdsMakeSchema，分别是用来进行XML和XDS相互转换，以及生成DSD文件的。</div><div>&#160;</div><div>&#160;&#160; &#160;在一个C/C++项目中，我们经常需要用struct定义一系列数据结构。xdsMakeSchema就可以通过输入数据结构的定义文件.h来生成DSD和相应的c头文件。在一个项目的初期，你可能需要用XML编辑器来编写这个项目所需要的XML数据，然后在程序中通过XDSLiteAPI来进行解析。这套API有两个Paser，一个服务于XML，另一个服务于XDS。当你的项目完全可以自动生成XML的时候就可以由XML转向XDS了。游戏编程精粹中解释的很详细，这边就说说需要注意的地方了。</div><div>&#160;</div><div>&#160;&#160; &#160;要利用API对XDS进行解析需要以下步骤：</div><div>① &#160; &#160; 以struct定义的C数据类型</div><div>② &#160; &#160; XDS的数据类型定义，可以在DSD中，也可以在程序中定义</div><div>③ &#160; &#160; 回调函数的编写，主要是XDS_PROCESSNODE函数</div><div>&#160;</div><div>以该工具包附带的Powerup为例，struct看起来是这样的：</div><div>struct PowerUp_t {</div><div>&#160;&#160; &#160;char szName[10]; &#160; &#160; &#160; &#160;// display name</div><div>&#160;&#160; &#160;char szImage[16]; &#160; &#160; &#160; // image file name</div><div>&#160;</div><div>&#160;&#160; &#160;// health increase/decrease (-128 to 127)</div><div>&#160;&#160; &#160;signed char &#160; iHealth;</div><div>&#160;</div><div>&#160;&#160; &#160;// temporary abilities/penalties</div><div>&#160;&#160; &#160;// (value is duration in seconds)</div><div>&#160;&#160; &#160;unsigned char iInvulnerability;</div><div>&#160;&#160; &#160;unsigned char iFastMove;</div><div>&#160;&#160; &#160;unsigned char iHighJump;</div><div>&#160;&#160; &#160;unsigned char iStunPlayer;</div><div>&#160;</div><div>&#160;&#160; &#160;// extra life (count)</div><div>&#160;&#160; &#160;unsigned char iLifeUp;</div><div>};</div><div>&#160;</div><div>// global power-up definition cache</div><div>extern struct PowerUp_t *g_PowerUps;</div><div>&#160;</div><div>可以通过使用xdsMakeSchema来生成dsd，同时生成的xxxx_dsd.h只是为了免除将dsd文件读入内存，查看它的内容就可以看到它定义了一个dsd数组：</div><div>// XDS DSD literal -- use this in calls to xdsInit()</div><div>//</div><div>#ifdef DEFINE_DSD</div><div>&#160;</div><div>const unsigned char XDSDSD_Powerups[216] = {</div><div>&#160;&#160; &#160;0x58, 0x44, 0x53, 0x21, 0x30, 0x33, 。。。</div><div>};</div><div>&#160;</div><div>#else</div><div>&#160;</div><div>extern const unsigned char XDSDSD_Powerups[216];</div><div>&#160;</div><div>#endif</div><div>&#160;</div><div>&#160;</div><div>// XDS DSD IDs -- use these in implementation of XDS_PROCESSNODE()</div><div>//</div><div>#define XDS_Powerups_Powerup &#160; &#160;0x0100 // Record</div><div>#define XDS_Powerups_PowerUp_t 0x0101 // Type</div><div>#define XDS_Powerups__xdsType1 0x0102 // Type</div><div>#define XDS_Powerups_g_PowerUps 0x0103 // Element</div><div>&#160;</div><div>同时还定义了一些常量，这些常量在解析xds中会用到。</div><div>除了在dsd中对于xds格式的定义之外，我们还可以在main.cpp中看到程序内的定义：</div><div>#ifdef XDS_SUPPORT_DEFTYPE</div><div>void regDsd(struct xdsHandle *hXds)</div><div>{</div><div>&#160;&#160; &#160;// Register my types (test only)</div><div>&#160;</div><div>&#160;&#160; &#160;xdsDefRecord(hXds, "Powerup", 2);</div><div>&#160;</div><div>&#160;&#160; &#160;unsigned short iStructType = xdsDefStructType(hXds, "PowerUp_t");</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "szName", XDS_TYPE_CHAR, 10);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "szImage", XDS_TYPE_CHAR, 16);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iHealth", XDS_TYPE_CHAR, 0);</div><div>xdsDefStructField(hXds, iStructType, "iInvulnerability", XDS_TYPE_BYTE, 0);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iFastMove", XDS_TYPE_BYTE, 0);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iHighJump", XDS_TYPE_BYTE, 0);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iStunPlayer", XDS_TYPE_BYTE, 0);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iLifeUp", XDS_TYPE_BYTE, 0);</div><div>&#160;</div><div>&#160;&#160; &#160;xdsDefStructDone(hXds, iStructType);</div><div>&#160;&#160; &#160;unsigned short iArrayType = xdsDefArrayType(hXds, "_xdsType1", iStructType, 0, 2);</div><div>&#160;</div><div>&#160;&#160; &#160;xdsDefElement(hXds, "g_PowerUps", iArrayType, 0);</div><div>}</div><div>#endif</div><div>&#160;</div><div>&#160;&#160; &#160;注意：交叉使用dsd定义和程序定义容易造成一个错误，就是在程序和dsd可能在定义的时候冲突，数据类型冲突，或者数据长度冲突，从而导致程序的崩溃。附带的例子中程序定义数据类型如下：</div><div>#ifdef XDS_SUPPORT_DEFTYPE</div><div>void regDsd(struct xdsHandle *hXds)</div><div>{</div><div>&#160;&#160; &#160;// Register my types (test only)</div><div>&#160;</div><div>&#160;&#160; &#160;xdsDefRecord(hXds, "Powerup", 4);</div><div>&#160;</div><div>&#160;&#160; &#160;unsigned short iStructType = xdsDefStructType(hXds, "PowerUp_t");</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "szName", XDS_TYPE_CHAR, 10);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "szImage", XDS_TYPE_CHAR, 16);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iHealth", XDS_TYPE_CHAR, 0);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iInvulnerability", XDS_TYPE_BYTE, 0);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iFastMove", XDS_TYPE_BYTE, 0);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iHighJump", XDS_TYPE_BYTE, 0);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iStunPlayer", XDS_TYPE_BYTE, 0);</div><div>&#160;&#160; &#160;xdsDefStructField(hXds, iStructType, "iLifeUp", XDS_TYPE_BYTE, 0);</div><div>&#160;</div><div>&#160;&#160; &#160;xdsDefStructDone(hXds, iStructType);</div><div>&#160;&#160; &#160;unsigned short iArrayType = xdsDefArrayType(hXds, "_xdsType1", iStructType, 0, 2);</div><div>&#160;</div><div>&#160;&#160; &#160;xdsDefElement(hXds, "g_PowerUps", iArrayType, 0);</div><div>}</div><div>#endif</div><div>&#160;</div><div>要是在生成dsd时用参数-r Powerup:2而这里用xdsDefRecord(hXds, "Powerup", 4)的话就会导致冲突。</div>
<img src ="http://www.cppblog.com/cloud/aggbug/66725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2008-11-12 15:34 <a href="http://www.cppblog.com/cloud/archive/2008/11/12/66725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐一款比较好用的python的IDE</title><link>http://www.cppblog.com/cloud/archive/2008/10/15/64010.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Wed, 15 Oct 2008 03:05:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2008/10/15/64010.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/64010.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2008/10/15/64010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/64010.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/64010.html</trackback:ping><description><![CDATA[推荐一款比较好用的python的IDE， 就是ActiveState 的Komodo
<img src ="http://www.cppblog.com/cloud/aggbug/64010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2008-10-15 11:05 <a href="http://www.cppblog.com/cloud/archive/2008/10/15/64010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在vs（Visual Studio）中的Output窗口双击定位代码</title><link>http://www.cppblog.com/cloud/archive/2008/09/19/62258.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Fri, 19 Sep 2008 03:03:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2008/09/19/62258.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/62258.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2008/09/19/62258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/62258.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/62258.html</trackback:ping><description><![CDATA[<div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&#160;main()<br>{<br>&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">errorFormat&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%s(%d):&#160;error\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br>&#160;&#160;&#160;&#160;printf(errorFormat,&#160;__FILE__,&#160;__LINE__);<br>&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br>}</span></div><div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; ">关键就是%s(%d), 只要赋值为文件名和行号， 双击即可定位到代码处， 当然， 想要printf到Output窗口， 那就在工程属性的BuildEvents->Post-Build Event 的CommandLine中填写$(TargetPath), 即可</div>
<img src ="http://www.cppblog.com/cloud/aggbug/62258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2008-09-19 11:03 <a href="http://www.cppblog.com/cloud/archive/2008/09/19/62258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>集成SVN源码管理和Mantis缺陷跟踪</title><link>http://www.cppblog.com/cloud/archive/2008/09/11/61606.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Thu, 11 Sep 2008 10:09:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2008/09/11/61606.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/61606.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2008/09/11/61606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/61606.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/61606.html</trackback:ping><description><![CDATA[<span  style="color: rgb(34, 51, 85); font-family: Arial; font-size: 14px; font-weight: bold; line-height: 21px;"><span  style="color: rgb(0, 0, 0); font-family: Verdana; font-weight: normal; "><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "><font face="Verdana">要集成Mantis和SVN，需要几个工具：<br>SVN客户端，TortoiseSVN，下载地址： http://tortoisesvn.net/&#160;<br>SVN服务端，这个应该都有吧。<br>Mantis缺陷跟踪系统 http://www.mantisbt.org/</font></p><font face="Verdana"><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "><br>首先在TortoiseSVN里设置一下项目的属性，右键点击目录，属性，在subversion一栏里，加入这几个属性</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">bugtraq:label = issue<br>bugtraq:url = http://%3cmantisserver%3e/mantis/view.php?id=%BUGID%<br>bugtraq:message = issue %BUGID%<br>bugtraq:warnifnoissue = true</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">到对应的SVN版本库里，找到hooks目录，建立一个post-commit.bat文件，将以下内容拷入：</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">REM Post-commit hook for MantisBT integration</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">rem REPOS svn版本库的路径<br>rem REV 版本信息<br>rem DETAILS_FILE 是版本库的目录，在版本库目录下建立一个log的目录，用来存放日志<br>rem set PHPRC=D:\EasyPHP\apache 默认会使用windows 目录下的 php.ini 修改后，读取 easyphp\apach 目录下</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">rem 拷贝了 checkin.php 进行修改，重新命名 为 checkin_svn.php 如果有中文传输，需要修改 checkin_svn.php<br>rem 增加抓换函数 $t_comment = mb_convert_encoding($t_comment, "utf-8","GB2312");&#160;<br>rem 修改位置在 &#8220; foreach ( $t_issues as $t_issue_id ) { &#8221;前面<br>rem mb_convert_encoding 此函数需要扩展文件php_mbstring.dll的支持~~&#160;&#160;<br>rem $t_comment&#160;&#160; = iconv("UTF-8","GB2312//TRANSLIT",$t_comment);&#160; 据说这个编码转换效率更高</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">&#160;</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">SET REPOS=%1<br>SET REV=%2<br>SET DETAILS_FILE=D:\svn\no1\log\svnfile_%REV%<br>SET LOG_FILE=D:\svn\no1\log\svnfile_%REV%_Log<br>set APR_ICONV_PATH=D:\EasyPHP\Subversion\iconv<br>set PHPRC=D:\EasyPHP\apache<br>set path=%path%;D:\EasyPHP\php5;D:\EasyPHP\Subversion\bin;</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "><br>echo ****** Source code change ******>>%DETAILS_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">echo SVN 修改人: >>%DETAILS_FILE%<br>svnlook author -r %REV% %REPOS%>>%DETAILS_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">echo SVN 修改日期: >>%DETAILS_FILE%<br>svnlook date -r %REV% %REPOS%>>%DETAILS_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">echo SVN 版本:&#160; >>%DETAILS_FILE%<br>echo %REV%>>%DETAILS_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">echo SVN 提交注释: >>%DETAILS_FILE%<br>svnlook log -r %REV% %REPOS%>>%DETAILS_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">echo SVN 修改明细: >>%DETAILS_FILE%<br>svnlook diff -r %REV% %REPOS%>>%DETAILS_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "><br>rem php.exe .\checkin_svn.php 信息文件日志文件<br>php.exe D:\EasyPHP\www\mantis\core\checkin_svn.php &lt;%DETAILS_FILE%>%LOG_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">del %DETAILS_FILE%<br>del %LOG_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "><br>最后，修改mantis安装目录下的config_inc.php，加入以下内容（mantis系统里要有SVN用户）：</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">&#160;$g_source_control_notes_view_status = VS_PUBLIC;<br>&#160;$g_source_control_account = 'SVN';<br>&#160;$g_source_control_set_status_to = OFF;<br>&#160;$g_source_control_regexp = "/\bissue [#]{0,1}(\d+)\b/i";</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">完成这些步骤后，就可以在SVN提交新版本时，同时发布内容到对应的缺陷跟踪系统了。</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">&#160;比如，修改了一个源文件，svn commit时，在右上的issue栏目里输入要提交到的具体的 issue/bug&#160; 编号，<br>&#160;然后在下面的message框内输入具体的描述，svn的hook就会自动往mantis里对应的条目里写入你提交时输入的这些内容。<br></p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">完成以上工作后使用过程中还存在一些问题<br>1、缺陷号没有强制输入，如果没有输入缺陷号，仍然可以提交<br>2、输入了错误的缺陷号，系统仍然提交，但是缺陷系统中没有相关的内容<br>解决这个问题，需要在提交前，对缺陷信息进行校验<br>一、创建 pre-commit.bat 校验缺陷号</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">REM pre-commit.bat hook for MantisBT integration<br>set REPOS=%1<br>set TXN=%2<br>SET DETAILS_FILE=D:\svn\no1\log\svnfile<br>SET LOG_FILE=D:\svn\no1\log\svnfile_Log<br>set APR_ICONV_PATH=D:\EasyPHP\Subversion\iconv<br>set PHPRC=D:\EasyPHP\apache<br>set path=%path%;D:\EasyPHP\php5;D:\EasyPHP\Subversion\bin;</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">rem 把注释信息写入到 DETAILS_FILE<br>svnlook log "%REPOS%" -t "%TXN%"&#160; >>%DETAILS_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">rem 执行checkin_svn_pre_commit.php 进行校验缺陷单号 是否在缺陷系统中存在，如果不存在，返回输出信息到 log_file中<br>php.exe D:\EasyPHP\www\mantis\core\checkin_svn_pre_commit.php &lt;%DETAILS_FILE%>%LOG_FILE%</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">rem 校验log_file中是否有内容，如果有内容，转入到出错提示<br>FOR /F "tokens=1,2* delims= " %%i in (%LOG_FILE%) do goto err</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">del %DETAILS_FILE%<br>del %LOG_FILE%<br>exit 0</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">:err<br>echo 缺陷单不存在，请正确填写缺陷单号，提交终止! 1>&amp;2<br>del %DETAILS_FILE%<br>del %LOG_FILE%<br>exit 1</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; ">二、创建checkin_svn_pre_commit.php 到数据库中校验缺陷单信息<br>拷贝 checkin.php 内容 新建checkin_svn_pre_commit.php 文件<br>删除 # add note to each bug only once 之后的到 exit( 0 ); 内容,修改为以下内容</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "># add note to each bug only once<br>&#160;$t_issues = array_unique( $t_issues );<br>&#160;$t_fixed_issues = array_unique( $t_fixed_issues );<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; $t_issues_svn = array_unique( $t_issues );<br>&#160;&#160;<br># 编码转换.<br>&#160; $t_comment = mb_convert_encoding($t_comment, "utf-8","GB2312");&#160;<br>&#160;&#160;<br>&#160; # 判断数据库中的 缺陷单号是否存在<br>&#160; foreach ( $t_issues_svn as $t_issue_id ) {<br>&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160; $query = "SELECT *<br>&#160;&#160;&#160; FROM mantis_bug_table<br>&#160;&#160;&#160; WHERE bug_text_id='$t_issue_id'";<br>&#160; $result = db_query( $query );<br>&#160; $issues_raw_count = db_num_rows( $result );<br>&#160;&#160;&#160;<br>&#160; if ($issues_raw_count&#160; == 0){<br>&#160;&#160; echo "$t_issue_id";<br>&#160;&#160; }<br>&#160;&#160; }<br>&#160;&#160;<br>&#160;exit( 0 );</p><p style="margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "><br>至此大部分的工作都已经完成,但是还存在一些问题<br>1 新增等操作的时候,有时候提交没有出现收入 issue 提示框，但是此时仍然需要输入缺陷号<br>测试可以要求，在提交注释的时候，按照 issue 1 形式手工写入缺陷单号，即可提交</p></font></span></span><img src ="http://www.cppblog.com/cloud/aggbug/61606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2008-09-11 18:09 <a href="http://www.cppblog.com/cloud/archive/2008/09/11/61606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++ coroutine</title><link>http://www.cppblog.com/cloud/archive/2008/09/09/61381.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Tue, 09 Sep 2008 07:31:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2008/09/09/61381.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/61381.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2008/09/09/61381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/61381.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/61381.html</trackback:ping><description><![CDATA[c++的协程库， 一个是boost::coroutine, 一个是<a href="http://www.akira.ruc.dk/~keld/research/COROUTINE/">http://www.akira.ruc.dk/~keld/research/COROUTINE/</a><img src ="http://www.cppblog.com/cloud/aggbug/61381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2008-09-09 15:31 <a href="http://www.cppblog.com/cloud/archive/2008/09/09/61381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++ mock object</title><link>http://www.cppblog.com/cloud/archive/2008/08/20/59474.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Wed, 20 Aug 2008 14:27:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2008/08/20/59474.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/59474.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2008/08/20/59474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/59474.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/59474.html</trackback:ping><description><![CDATA[找到一个比较好的c++ 的MockObject库,&nbsp; amop(http://code.google.com/p/amop/), 该库很容易根据接口定制一个Mock object, 比Mockpp好用多了<br><img src ="http://www.cppblog.com/cloud/aggbug/59474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2008-08-20 22:27 <a href="http://www.cppblog.com/cloud/archive/2008/08/20/59474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OLE控件在Direct3D中的渲染方法</title><link>http://www.cppblog.com/cloud/archive/2008/03/26/45406.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Wed, 26 Mar 2008 02:36:00 GMT</pubDate><guid>http://www.cppblog.com/cloud/archive/2008/03/26/45406.html</guid><wfw:comment>http://www.cppblog.com/cloud/comments/45406.html</wfw:comment><comments>http://www.cppblog.com/cloud/archive/2008/03/26/45406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cloud/comments/commentRss/45406.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cloud/services/trackbacks/45406.html</trackback:ping><description><![CDATA[<p>Windows上的图形绘制是基于GDI的, 而Direct3D并不是, 所以, 要在3D窗口中显示一些Windows中的控件会有很多问题</p>
<p>那么, 有什么办法让GDI绘制的内容在3D中显示出来?反正都是图像, 总有办法实现的嘛!</p>
<p>前段时间在研究浏览器在游戏中的嵌入,&nbsp;基本的思路就是在后台打开一个浏览窗口, 然后把它显示的内容拷贝到一张纹理上, 再把纹理在D3D中绘制出来, 至于事件处理就要另做文章了.</p>
<p>所以, 其它的Windows里的GDI绘制的东西都可以这样来实现!<br>最初我是GetDC, 然后GetPixel逐像素拷贝, 慢得我想死.....<br>后来发现了BitBlt这一速度很快的复制方法, 才有了实用价值:</p>
<p>1. 取得控件的DC: GetDC(hWnd)<br>2. 取得Texture的DC: IDirect3DSurface9::GetDC<br>3. 用BitBlt拷贝过去</p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230); PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<div><span style="COLOR: rgb(0,0,0)">BOOL&nbsp;BitBlt(<br>&nbsp;&nbsp;HDC&nbsp;hdcDest,&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;handle&nbsp;to&nbsp;destination&nbsp;DC</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;nXDest,&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;x-coord&nbsp;of&nbsp;destination&nbsp;upper-left&nbsp;corner</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;nYDest,&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;y-coord&nbsp;of&nbsp;destination&nbsp;upper-left&nbsp;corner</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;nWidth,&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;width&nbsp;of&nbsp;destination&nbsp;rectangle</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;nHeight,&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;height&nbsp;of&nbsp;destination&nbsp;rectangle</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;HDC&nbsp;hdcSrc,&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;handle&nbsp;to&nbsp;source&nbsp;DC</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;nXSrc,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;x-coordinate&nbsp;of&nbsp;source&nbsp;upper-left&nbsp;corner</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;nYSrc,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;y-coordinate&nbsp;of&nbsp;source&nbsp;upper-left&nbsp;corner</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;DWORD&nbsp;dwRop&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;raster&nbsp;operation&nbsp;code</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">);</span></div>
</div>
<p>如果是OLE控件那就更简单啦:</p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230); PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<div><span style="COLOR: rgb(0,0,0)">WINOLEAPI&nbsp;OleDraw(&nbsp;<br>&nbsp;&nbsp;IUnknown&nbsp;</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)">&nbsp;pUnk,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">Pointer&nbsp;to&nbsp;the&nbsp;view&nbsp;object&nbsp;to&nbsp;be&nbsp;drawn</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;DWORD&nbsp;dwAspect,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">How&nbsp;the&nbsp;object&nbsp;is&nbsp;to&nbsp;be&nbsp;represented</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;HDC&nbsp;hdcDraw,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">Device&nbsp;context&nbsp;on&nbsp;which&nbsp;to&nbsp;draw</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;LPCRECT&nbsp;lprcBounds&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">Pointer&nbsp;to&nbsp;the&nbsp;rectangle&nbsp;in&nbsp;which&nbsp;the&nbsp;object&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)">&nbsp;is&nbsp;drawn</span><span style="COLOR: rgb(0,128,0)"><br></span><span style="COLOR: rgb(0,0,0)">);</span></div>
</div>
<p>比如我有一个IWebBrowser2的指针, 想把它显示的内容拷贝到纹理上, 可以这么干:</p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230); PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
<div><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;IDirect3DSurface9</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)">&nbsp;pSurface&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">this</span><span style="COLOR: rgb(0,0,0)">-&gt;</span><span style="COLOR: rgb(0,0,0)">mTexture</span><span style="COLOR: rgb(0,0,0)">-&gt;</span><span style="COLOR: rgb(0,0,0)">GetSurfaceLevel(</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">,&nbsp;</span><span style="COLOR: rgb(0,0,0)">&amp;</span><span style="COLOR: rgb(0,0,0)">pSurface);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">&nbsp;(NULL&nbsp;</span><span style="COLOR: rgb(0,0,0)">!=</span><span style="COLOR: rgb(0,0,0)">&nbsp;pSurface)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;hdcTexture;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HRESULT&nbsp;hr&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;pSurface</span><span style="COLOR: rgb(0,0,0)">-&gt;</span><span style="COLOR: rgb(0,0,0)">GetDC(</span><span style="COLOR: rgb(0,0,0)">&amp;</span><span style="COLOR: rgb(0,0,0)">hdcTexture);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(FAILED(hr))&nbsp;</span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::SetMapMode(hdcTexture,&nbsp;MM_TEXT);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::OleDraw(pBrowser,&nbsp;DVASPECT_CONTENT,&nbsp;hdcTexture,&nbsp;</span><span style="COLOR: rgb(0,0,0)">&amp;</span><span style="COLOR: rgb(0,0,0)">rect);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSurface</span><span style="COLOR: rgb(0,0,0)">-&gt;</span><span style="COLOR: rgb(0,0,0)">ReleaseDC(hdcTexture);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSurface</span><span style="COLOR: rgb(0,0,0)">-&gt;</span><span style="COLOR: rgb(0,0,0)">Release();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span></div>
</div>
<p>Show一下:<br><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/DXWebBrowser.JPG"></p>
<p>不光是浏览器啦, 任何OLE控件都可以, 可以发挥你的想像力:<br><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/xoyojank/DxWebFlashPlayer.JPG"></p>
<img src ="http://www.cppblog.com/cloud/aggbug/45406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cloud/" target="_blank">cloud</a> 2008-03-26 10:36 <a href="http://www.cppblog.com/cloud/archive/2008/03/26/45406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>