﻿<?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++博客-小丐的blog-随笔分类-我的代码玩具</title><link>http://www.cppblog.com/qzb2006e/category/2342.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 22 May 2008 22:52:05 GMT</lastBuildDate><pubDate>Thu, 22 May 2008 22:52:05 GMT</pubDate><ttl>60</ttl><item><title>一道Sqlserver面试题</title><link>http://www.cppblog.com/qzb2006e/archive/2008/05/01/48596.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Thu, 01 May 2008 09:44:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2008/05/01/48596.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/48596.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2008/05/01/48596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/48596.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/48596.html</trackback:ping><description><![CDATA[前几天去面试，考官出了一道sql题，当时没多考虑就给出了答案，后来回来一想才知道错了。<br><img alt=""  src="http://www.cppblog.com/images/cppblog_com/qzb2006e/table.JPG" height="163" width="177"><br>题目很简单，显示aname中重复的第一行<br>答案应当如此（调试通过）<br>select (select top 1 id from aa as b where b.aname=c.aname) as id,aname from (select distinct aname from aa) c&nbsp;
<br>另外出第m行到第n行数据的题也比较常见<br>不过应当注意是否包含第m行，如果包含第m行，则应该（还是针对上面的表）：<br>select * from(select top (n-m+1)* from (select top (n)* from aa order by id)f order by id desc) h order by id
<br><br><img src ="http://www.cppblog.com/qzb2006e/aggbug/48596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2008-05-01 17:44 <a href="http://www.cppblog.com/qzb2006e/archive/2008/05/01/48596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>撤销和重做（命令模式）</title><link>http://www.cppblog.com/qzb2006e/archive/2008/03/16/44654.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Sun, 16 Mar 2008 15:23:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2008/03/16/44654.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/44654.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2008/03/16/44654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/44654.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/44654.html</trackback:ping><description><![CDATA[<p><img src="http://www.cppblog.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/723defda9868_14D7A/clip_image002_5.gif" height="248" width="554"></p>
<p>1、命令管理器管理命令</p>
<p><a href="http://www.cppblog.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/723defda9868_14D7A/clip_image0023.gif" atomicselection="true"><img alt="clip_image0023" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/723defda9868_14D7A/clip_image0023_thumb.gif" height="666" width="553"></a></p>
<p>void testCommandManagerArrangeCommand()<br>{<br>&nbsp;&nbsp;&nbsp;
cout&lt;&lt;"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;命令管理器调度命令
&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand1=new CDeleteCommand("obj1");<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand2=new CDeleteCommand("obj2");<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand3=new CDeleteCommand("obj3");<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand4=new CDeleteCommand("obj4");  </p>
<p>&nbsp;&nbsp;&nbsp; CCommandManager manager;<br>&nbsp;&nbsp;&nbsp; manager.Do(pCommand1);<br>&nbsp;&nbsp;&nbsp; manager.Do(pCommand2);<br>&nbsp;&nbsp;&nbsp; manager.Do(pCommand3);<br>&nbsp;&nbsp;&nbsp; manager.Undo();<br>&nbsp;&nbsp;&nbsp; manager.Undo();<br>&nbsp;&nbsp;&nbsp; manager.Redo();<br>&nbsp;&nbsp;&nbsp; manager.Undo();<br>&nbsp;&nbsp;&nbsp; manager.Do(pCommand4);<br>&nbsp;&nbsp;&nbsp; manager.Undo();<br>&nbsp;&nbsp;&nbsp; manager.Redo();<br>}</p>
<p>执行效果：</p>
<p>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;命令管理器调度命令&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>obj1 is deleted.<br>obj2 is deleted.<br>obj3 is deleted.<br>obj3 is undeleted.<br>obj2 is undeleted.<br>obj2 is deleted.<br>obj2 is undeleted.<br>obj4 is deleted.<br>obj4 is undeleted.<br>obj4 is deleted. </p>
<p>2、命令管理器管理命令管理器 </p>
<p><img src="http://www.cppblog.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/723defda9868_14D7A/clip_image002_6.gif" height="930" width="455"> </p>
<p>//命令管理器调度命令管理器<br>void testCommandManagerArrangeCommandManager()<br>{<br>&nbsp;&nbsp;&nbsp;
cout&lt;&lt;"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;命令管理器调度命令管理
器&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand1=new CDeleteCommand("cm1--obj1");<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand2=new CDeleteCommand("cm1--obj2");<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand3=new CDeleteCommand("cm1--obj3");<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand4=new CDeleteCommand("cm2--obj1");<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand5=new CDeleteCommand("cm2--obj2");<br>&nbsp;&nbsp;&nbsp; CDeleteCommand *pCommand6=new CDeleteCommand("cm2--obj3");<br>&nbsp;&nbsp;&nbsp; CCommandManager cm1;<br>&nbsp;&nbsp;&nbsp; CCommandManager cm2;<br>&nbsp;&nbsp;&nbsp; CCommandManager cmMain;<br>&nbsp;&nbsp;&nbsp; cm1.SetParentCommandManager(&amp;cmMain);<br>&nbsp;&nbsp;&nbsp; cm2.SetParentCommandManager(&amp;cmMain);<br>&nbsp;&nbsp;&nbsp; cm1.Do(pCommand1);<br>&nbsp;&nbsp;&nbsp; cm2.Do(pCommand4);<br>&nbsp;&nbsp;&nbsp; cm1.Do(pCommand2);<br>&nbsp;&nbsp;&nbsp; cm2.Do(pCommand5);<br>&nbsp;&nbsp;&nbsp; cm1.Do(pCommand3);<br>&nbsp;&nbsp;&nbsp; cm2.Do(pCommand6);<br>&nbsp;&nbsp;&nbsp; cmMain.Undo();<br>&nbsp;&nbsp;&nbsp; cmMain.Undo();<br>&nbsp;&nbsp;&nbsp; cmMain.Undo();<br>&nbsp;&nbsp;&nbsp; cmMain.Redo();<br>&nbsp;&nbsp;&nbsp; cmMain.Undo();  </p>
<p>} </p>
<p>执行效果： </p>
<p>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;命令管理器调度命令管理器&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>cm1--obj1 is deleted.<br>cm2--obj1 is deleted.<br>cm1--obj2 is deleted.<br>cm2--obj2 is deleted.<br>cm1--obj3 is deleted.<br>cm2--obj3 is deleted.<br>cm2--obj3 is undeleted.<br>cm1--obj3 is undeleted.<br>cm2--obj2 is undeleted.<br>cm2--obj2 is deleted.<br>cm2--obj2 is undeleted. </p>
<p>注意： </p>
<p>1、确保命令的Execute和UnExecute是完全可逆的操作。 </p>
<p>2、要保障Execute和UnExecute的可逆性，特别要关注他们执行的环境（比如绘图的时候，这些操作要有同样的尺寸标准，否则很难实现互逆的操作）。 </p>
<p>3、注意不要插入空命令。</p>
<p><a  href="http://www.cppblog.com/Files/qzb2006e/CommonModeTestAdv.rar" title="代码">代码</a><br>
</p><img src ="http://www.cppblog.com/qzb2006e/aggbug/44654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2008-03-16 23:23 <a href="http://www.cppblog.com/qzb2006e/archive/2008/03/16/44654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net赋值控件(1)</title><link>http://www.cppblog.com/qzb2006e/archive/2007/08/12/29833.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Sun, 12 Aug 2007 09:00:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2007/08/12/29833.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/29833.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2007/08/12/29833.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/29833.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/29833.html</trackback:ping><description><![CDATA[<p>进一步研究服务器端控件，然后把代码修改了一下，现在页面上看上去会是这个样子：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">form&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="form1"</span><span style="COLOR: #ff0000">&nbsp;runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">uc1:WebUserControl&nbsp;</span><span style="COLOR: #ff0000">ID</span><span style="COLOR: #0000ff">="WebUserControl1"</span><span style="COLOR: #ff0000">&nbsp;runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">uc1:WebUserControl</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">asp:TextBox&nbsp;</span><span style="COLOR: #ff0000">ID</span><span style="COLOR: #0000ff">="TextBox1"</span><span style="COLOR: #ff0000">&nbsp;runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">asp:TextBox</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">asp:Button&nbsp;</span><span style="COLOR: #ff0000">ID</span><span style="COLOR: #0000ff">="Button1"</span><span style="COLOR: #ff0000">&nbsp;runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #ff0000">&nbsp;Text</span><span style="COLOR: #0000ff">="Button"</span><span style="COLOR: #ff0000">&nbsp;OnClick</span><span style="COLOR: #0000ff">="Button1_Click"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;为Control设置ViewState值&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">cus:SetViewStateValueToControl&nbsp;</span><span style="COLOR: #ff0000">ID</span><span style="COLOR: #0000ff">="SetViewStateValueToControl1"</span><span style="COLOR: #ff0000">&nbsp;KeyName</span><span style="COLOR: #0000ff">="HelloWorld"</span><span style="COLOR: #ff0000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">SetValueItems</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">cus:SetValueItem&nbsp;</span><span style="COLOR: #ff0000">ControlId</span><span style="COLOR: #0000ff">="WebUserControl1"</span><span style="COLOR: #ff0000">&nbsp;ControlPropertyName</span><span style="COLOR: #0000ff">="Text"</span><span style="COLOR: #ff0000">&nbsp;PropertyName</span><span style="COLOR: #0000ff">="Word"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">SetValueItems</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">cus:SetViewStateValueToControl</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;为Control设置Session值</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">cus:SetSessionValueToControl&nbsp;</span><span style="COLOR: #ff0000">runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #ff0000">&nbsp;ID</span><span style="COLOR: #0000ff">="SetSessionValueToControl1"</span><span style="COLOR: #ff0000">&nbsp;KeyName</span><span style="COLOR: #0000ff">="HelloWorld"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">SetValueItems</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">cus:SetValueItem&nbsp;</span><span style="COLOR: #ff0000">ControlId</span><span style="COLOR: #0000ff">="TextBox1"</span><span style="COLOR: #ff0000">&nbsp;ControlPropertyName</span><span style="COLOR: #0000ff">="Text"</span><span style="COLOR: #ff0000">&nbsp;PropertyName</span><span style="COLOR: #0000ff">="Word"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">SetValueItems</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">cus:SetSessionValueToControl</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;</span></div>
<p>KeyName：Session或ViewState的Key；<br>ControlId：要被赋值的控件；<br>ControlPropertyName：要被赋值的控件属性；<br>PropertyName：Session或ViewState中保存的对象的一个属性，这个属性值会被赋给控件。<br><a title=代码 href="http://www.cppblog.com/Files/qzb2006e/SetControlValues0.1.rar">代码</a></p>
<img src ="http://www.cppblog.com/qzb2006e/aggbug/29833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2007-08-12 17:00 <a href="http://www.cppblog.com/qzb2006e/archive/2007/08/12/29833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net赋值控件(0)</title><link>http://www.cppblog.com/qzb2006e/archive/2007/08/10/29727.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Fri, 10 Aug 2007 15:18:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2007/08/10/29727.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/29727.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2007/08/10/29727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/29727.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/29727.html</trackback:ping><description><![CDATA[<p>&nbsp;由于总是不喜欢在页面的后台代码中写太多的东西，当然更不喜欢inline的页面写法，所以这里我做了一个服务器端的控件，这个控件的作用就是赋值。从Session或ViewState里面取值，并赋给页面中的任一个控件。比如：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">asp:TextBox&nbsp;</span><span style="COLOR: #ff0000">ID</span><span style="COLOR: #0000ff">="TextBox1"</span><span style="COLOR: #ff0000">&nbsp;runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">asp:TextBox</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">cus:SetValue&nbsp;</span><span style="COLOR: #ff0000">runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #ff0000">&nbsp;ContainerType</span><span style="COLOR: #0000ff">="Session"</span><span style="COLOR: #ff0000">&nbsp;ContainerName</span><span style="COLOR: #0000ff">="Session1"</span><span style="COLOR: #ff0000">&nbsp;ExpressionSourcePropertyName</span><span style="COLOR: #0000ff">="Word"</span><span style="COLOR: #ff0000">&nbsp;DestControlName</span><span style="COLOR: #0000ff">="TextBox1"</span><span style="COLOR: #ff0000">&nbsp;DestControlPropertyName</span><span style="COLOR: #0000ff">="Text"</span><span style="COLOR: #ff0000">&nbsp;ID</span><span style="COLOR: #0000ff">="SetValue1"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">cus:SetValue</span><span style="COLOR: #0000ff">&gt;</span></div>
在页面中有一个TextBox，它的Id是TextBox1,我在页面中放置一个赋值控件SetValue，从Session里面取得一个对象，并把这个对象中的Word属性赋值给TextBox1的Text属性。<br>在这里简单定义了一下：<br>ContainerType：容器类型。Session或ViewState。<br>ContainerName：容器的名称。即Session或ViewState的键名称。<br>ExpressionSourcePropertyName：存在Session或ViewState的对象中的要取得的属性名。<br>DestControlId：被赋值的控件Id。<br>DestControlPropertyName：被赋值控件的属性名。<br><a title=代码 href="http://www.cppblog.com/Files/qzb2006e/SetValueControl.rar">代码</a><br>
<img src ="http://www.cppblog.com/qzb2006e/aggbug/29727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2007-08-10 23:18 <a href="http://www.cppblog.com/qzb2006e/archive/2007/08/10/29727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一个QT程序</title><link>http://www.cppblog.com/qzb2006e/archive/2007/07/31/29041.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Tue, 31 Jul 2007 15:33:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2007/07/31/29041.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/29041.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2007/07/31/29041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/29041.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/29041.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;最近在研究QT，并尝试写了一个小程序。程序的功能很简单，就是进行一些文件的操作：假如说我有两个文件，分别是文件A，文件B。其中文件A中的前n个字节的数据都为0，这样的文件A我把它视为一个&#8220;坏文件&#8221;。我要做的就是在文件B中找到A的值为0的数据所对应的数据，并用它替换掉A的&#8220;坏数据&#8221;。为了保护现场，我将替换好的A保存为文件C。之所以开发这个程...&nbsp;&nbsp;<a href='http://www.cppblog.com/qzb2006e/archive/2007/07/31/29041.html'>阅读全文</a><img src ="http://www.cppblog.com/qzb2006e/aggbug/29041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2007-07-31 23:33 <a href="http://www.cppblog.com/qzb2006e/archive/2007/07/31/29041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Qt+Dev cpp环境配置</title><link>http://www.cppblog.com/qzb2006e/archive/2007/07/25/28786.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Wed, 25 Jul 2007 15:50:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2007/07/25/28786.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/28786.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2007/07/25/28786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/28786.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/28786.html</trackback:ping><description><![CDATA[照着网上说的很多办法，都没有成功，后来在一个外国网站上发现了一套模板，只要把模板解压缩到template 目录下面，然后再在编译器选项中设置一下lib(添加qt的lib目录)就可以了.<br>这是<a title=模板文件 href="http://www.cppblog.com/Files/qzb2006e/Qt4.1-Template.zip">模板</a>文件：<br>
<img src ="http://www.cppblog.com/qzb2006e/aggbug/28786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2007-07-25 23:50 <a href="http://www.cppblog.com/qzb2006e/archive/2007/07/25/28786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个用于进行文件上传的dll</title><link>http://www.cppblog.com/qzb2006e/archive/2007/06/10/25995.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Sun, 10 Jun 2007 13:36:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2007/06/10/25995.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/25995.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2007/06/10/25995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/25995.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/25995.html</trackback:ping><description><![CDATA[<p>这是06年5月份左右制作的一个小玩意.在windows平台下的任何语言中引入这个dll,就可以进行文件的上传了.东西不是很成熟,另外由于接受方是一个web程序,安全性也差些,所以开发出来以后就没有再使用.当然难说以后会不会用得到,就当是在这里做个备份吧.<br>文件夹说明:<br>upload.一个动态库,封装了上传文件的一个函数,使用vc7编写;<br>UploadTest:一个web程序,可以接受文件;<br>pb_testupload:是一个用pb进行调用的例子,例子所引用的dll有点老,要想使用新版本的话,还需要修改一下.<br><a title=pb例子 href="http://www.cppblog.com/Files/qzb2006e/pb_testupload.rar">pb例子</a><br><a title=上传dll href="http://www.cppblog.com/Files/qzb2006e/upload.rar">上传dll</a><br><a title=文件接受程序 href="http://www.cppblog.com/Files/qzb2006e/UploadTest_0.1.2.rar">文件接受程序</a></p>
<img src ="http://www.cppblog.com/qzb2006e/aggbug/25995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2007-06-10 21:36 <a href="http://www.cppblog.com/qzb2006e/archive/2007/06/10/25995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>com方式调用matlab(附:运行结果及代码) </title><link>http://www.cppblog.com/qzb2006e/archive/2006/08/28/11802.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Mon, 28 Aug 2006 14:04:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2006/08/28/11802.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/11802.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2006/08/28/11802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/11802.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/11802.html</trackback:ping><description><![CDATA[
		<p>         目录<br />        <a class="" title="" href="/qzb2006e/archive/2006/08/09/11064.html" target="">com方式调用matlab(一)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/10/11108.html" target="">com方式调用matlab(二)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/11/11138.html" target="">com方式调用matlab(三)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/16/11307.html" target="">com方式调用matlab(四)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/21/11538.html" target="">com方式调用matlab(五)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11797.html" target="">com方式调用matlab(六)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11802.html" target="">com方式调用matlab(附:运行结果及代码)</a>       <br />        以下为程序的运行结果：<br /><img height="569" alt="result.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/result.JPG" width="863" border="0" /><br />        <a class="" title="" href="/Files/qzb2006e/matlabTest.rar" target="">代码</a><br /><img height="1" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=632780334567500000" width="1" /></p>
<img src ="http://www.cppblog.com/qzb2006e/aggbug/11802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2006-08-28 22:04 <a href="http://www.cppblog.com/qzb2006e/archive/2006/08/28/11802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>com方式调用matlab(六)</title><link>http://www.cppblog.com/qzb2006e/archive/2006/08/28/11797.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Mon, 28 Aug 2006 13:41:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2006/08/28/11797.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/11797.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2006/08/28/11797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/11797.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/11797.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 目录        com方式调用matlab(一)        com方式调用matlab(二)         com方式调用matlab(三)        com方式调用matlab(四)         com方式调用matlab(五)        com方式调用matlab(六)        com方式调用matlab(附:运行结果及代码)        前面已经介绍了几个辅助类...&nbsp;&nbsp;<a href='http://www.cppblog.com/qzb2006e/archive/2006/08/28/11797.html'>阅读全文</a><img src ="http://www.cppblog.com/qzb2006e/aggbug/11797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2006-08-28 21:41 <a href="http://www.cppblog.com/qzb2006e/archive/2006/08/28/11797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>com方式调用matlab(五)</title><link>http://www.cppblog.com/qzb2006e/archive/2006/08/21/11538.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Mon, 21 Aug 2006 12:13:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2006/08/21/11538.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/11538.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2006/08/21/11538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/11538.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/11538.html</trackback:ping><description><![CDATA[         目录<br />        <a class="" title="" href="/qzb2006e/archive/2006/08/09/11064.html" target="">com方式调用matlab(一)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/10/11108.html" target="">com方式调用matlab(二)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/11/11138.html" target="">com方式调用matlab(三)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/16/11307.html" target="">com方式调用matlab(四)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/21/11538.html" target="">com方式调用matlab(五)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11797.html" target="">com方式调用matlab(六)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11802.html" target="">com方式调用matlab(附:运行结果及代码)</a><br />        在明确了如何读取配置文件以后，现在我们如何将配置文件的信息反馈给用户呢？<br />        用户当然要通过用户界面和我们程序所提供的一切功能打交道。我们当然不希望一下子把配置文件里面这么多信息一下子全都提供给用户，那么考虑用这样一种所谓“联动”的方式，就是说当用户从下拉列表中选择一个配置名称后，就列出该配置的所有信息。这样似乎要稍微友好一些。另外我们还需要允许用户能够修改配置内容，这样还要从这些动态生成的控件中取得数值。说到这里，肯定大家会想到STL中的Map或List。恩，确实可以这样实现，但是我们有MFC，我们用CTypedPtrMap。<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"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> CEditCtrlFactory<br />{<br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">属性</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">     CTypedPtrMap</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">CMapStringToPtr,CString,CWnd</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000"> m_ctrlMap;<br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br />    CEditCtrlFactory(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);<br />    </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CEditCtrlFactory(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);<br />    CWnd</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> createCtrl(CWnd </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">wnd,CString typeName,CString attributeName,CRect rect);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建控件对象</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    CWnd</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> getCtrl(CString attributeName);<br />    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> disposeAll();<br /></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">私有方法</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    <br />};</span></div><p>        这里就是用了CTypedPtrMap，声明了一个变量m_ctrlMap，它的索引是一个CString型变量，然后内容为一个CWnd型的指针。我们知道，一切窗体、按钮等等的东西都是从CWnd继承的。我们用CWnd来代指一切需要动态生成的控件（其实在这个程序中，主要动态生成CEdit型和CStatic型控件），这应当算是一个装箱操作了吧。</p><p>        方法createCtrl用来创建控件，并放到Map里面，getCtrl用来从Map中取得相应的控件对象。<br />        下面是createCtrl的详细实现：<br />        </p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">CWnd</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> CEditCtrlFactory::createCtrl(CWnd </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">wnd,CString typeName,CString attributeName,CRect rect)<br />{<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建cedit对象</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(typeName</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">CEdit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br />    {<br />        CEdit </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pEdit </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CEdit();<br />        pEdit</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">CreateEx(WS_EX_CLIENTEDGE,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">EDIT</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">, WS_CHILD</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">WS_VISIBLE,rect,wnd,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">加入映射表</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        m_ctrlMap[attributeName]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pEdit;<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> pEdit;<br />    }<br />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(typeName</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">CStatic</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br />    {<br />        CStatic </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pStatic</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CStatic();<br />        pStatic</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Create(attributeName,WS_CHILD</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">WS_VISIBLE,rect,wnd);<br />        m_ctrlMap[attributeName]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pStatic;<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> pStatic;<br />    }<br />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> NULL;<br />}</span></div><br />        其实很简单，就是用CreateEx这个方法。参数wnd为容纳这个控件的窗体,rect指明了控件的位置。其他参数都是些宏定义。然后用"m_ctrlMap[attributeName]<span style="COLOR: #000000">=控件指针"这句话来把控件放入Map。假如C++能够支持点反射之类的语法的话，这一部分可以写得有趣些，但是据我所知，好像不行；另外听说可以通过定义一些宏之类的东西可以间接实现，这都是我能力之所不及的，有兴趣的人可以自己实践。<br />        下面是getCtrl()这个方法的实现：<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.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">CWnd</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> CEditCtrlFactory::getCtrl(CString attributeName)<br /><img id="Codehighlighter1_55_141_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_141_Open_Text.style.display='none'; Codehighlighter1_55_141_Closed_Image.style.display='inline'; Codehighlighter1_55_141_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_55_141_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_55_141_Closed_Text.style.display='none'; Codehighlighter1_55_141_Open_Image.style.display='inline'; Codehighlighter1_55_141_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_55_141_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_55_141_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从映射表中取得cedit对象</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    CWnd </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pWnd;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    m_ctrlMap.Lookup(attributeName,pWnd);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> pWnd;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></span>        用了CTypedPtrMap.lookup来根据控件名字来查找控件对象。<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"><span style="COLOR: #000000">}<br /></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> CEditCtrlFactory::disposeAll()<br />{<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">删除所有edit对象</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (POSITION pos </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m_ctrlMap.GetStartPosition(); pos; )<br />    {<br />        CWnd </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pWnd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br />        m_ctrlMap.GetNextAssoc(pos, CString(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">), pWnd);<br />        delete pWnd;<br />    }<br />    m_ctrlMap.RemoveAll();<br />}</span></div>        就是不停的通过GetNextAssoc取得Map中的对象指针，然后释放之。最后清空整个Map。<br />        到这里，两个工具类就介绍完毕了。<img src ="http://www.cppblog.com/qzb2006e/aggbug/11538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2006-08-21 20:13 <a href="http://www.cppblog.com/qzb2006e/archive/2006/08/21/11538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>com方式调用matlab(四)</title><link>http://www.cppblog.com/qzb2006e/archive/2006/08/16/11307.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Wed, 16 Aug 2006 14:46:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2006/08/16/11307.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/11307.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2006/08/16/11307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/11307.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/11307.html</trackback:ping><description><![CDATA[
		<p>         目录<br />        <a class="" title="" href="/qzb2006e/archive/2006/08/09/11064.html" target="">com方式调用matlab(一)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/10/11108.html" target="">com方式调用matlab(二)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/11/11138.html" target="">com方式调用matlab(三)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/16/11307.html" target="">com方式调用matlab(四)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/21/11538.html" target="">com方式调用matlab(五)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11797.html" target="">com方式调用matlab(六)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11802.html" target="">com方式调用matlab(附:运行结果及代码)</a><br />        相信看了上一部分的介绍,已经有人不需要往下继续看了.因为技术方面就是如此.况且代码写得也不是很严谨.当然,前面也说过,这里只是为大家提供一种思路,给没有用过这种方式的人提供一种参考意见,给很少用到过组件的人提供一点组件方面的知识,当然,有些东西也许不是合理合法的,具体的一些,您可以去看一下MSDN.<br />         好了,闲话就说到这里,上一部分的代码所涉及的一些知识,在以后会介绍到.本部分先说一说前面提到的几个工具类.</p>
		<p>        首先组件的相关信息是放在xml配置文件里面的.要想使用这个配置文件,就不得不用到xml的parser,当然我们在windows底下写程序,微软已经提供了一个封装好的强有力的工具——XmlDom。其中提供了很多有用的类和接口。用这些东西操作xml是非常简单的。不过对于目前我们调用matlab组件的程序来讲，并不一定都能够用到。另外，我还希望能够在我的配置文件里面进行遍历的操作。所以我自行把感兴趣的一些操作按照自己的调用方式封装了一下。下面是关于这个类的定义情况：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> CMyXml  <br /><img id="Codehighlighter1_15_1628_Open_Image" onclick="this.style.display='none'; Codehighlighter1_15_1628_Open_Text.style.display='none'; Codehighlighter1_15_1628_Closed_Image.style.display='inline'; Codehighlighter1_15_1628_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_15_1628_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_15_1628_Closed_Text.style.display='none'; Codehighlighter1_15_1628_Open_Image.style.display='inline'; Codehighlighter1_15_1628_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_15_1628_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_15_1628_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">本函数可以访问任意CMyXml类对象的私有变量</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    friend CMyXml::AppendChild(CMyXml xml);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000">:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    BOOL AppendChild(CMyXml xml);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">将xml指定节点附加为子节点</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    _bstr_t GetDocXml();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">获取xml文档内容</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL GetChildNodes();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">获取当前节点所有子节点</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL DeleteNode();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">删除当前节点</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL CreateNewNode(LPTSTR NodeName);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">从当前节点创建子节点</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL AddAttrbuteDefinition(LPTSTR AttrbuteName);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">为当前节点增加属性</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL DeleteAttrbuteDefinition(LPTSTR AttrbuteName);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">为当前节点删除属性</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    _bstr_t GetAttrbuteValue(LPTSTR AttrbuteName);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">获取节点值</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL SetAttrbuteValue(LPTSTR AttrbuteName,LPTSTR AttrbuteValue);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">设置节点值</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    _bstr_t GetCurrentNodeValue();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">获取当前节点的值</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL SetCurrentNodeValue(LPTSTR NodeValue);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">设置当前节点的值</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL MoveToParent();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">移动当前节点到父节点</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL MoveCurrentTo(</span>
						<span style="COLOR: #0000ff">long</span>
						<span style="COLOR: #000000"> nIndex);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">移动当前节点到节点列中指定位置</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL LoadXmlFromFile(LPTSTR XmlFileName);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">从文件读入xml</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL LoadXmlFromString(LPTSTR XmlDocSTR);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">从字符串读入xml</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL GetMatchedSubElementList(LPTSTR ElementName);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">从当前指向元素的子元素当中获取和所给名字匹配的元素列</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL GetMatchedParentElementList(LPTSTR ElementName);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">从当前节点的父节点的所有子节点中获取和所给名字所匹配的元素列</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL GetMatchedRootElementList(LPTSTR ElementName);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">从根节点中获取匹配的节点列</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    CString GetCurrentNodeName();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">获取当前节点的名称</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">long</span>
						<span style="COLOR: #000000"> GetCurrentIndex();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">获取当前节点的位置</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">long</span>
						<span style="COLOR: #000000"> GetCurrentListLength();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">获取当前节点列元素个数</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL Save();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">保存xml</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL SaveAs(LPTSTR Filename);</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">另存为</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    CMyXml();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">virtual</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">~</span>
						<span style="COLOR: #000000">CMyXml();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000">:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">私有方法</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL AssertDocument();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">判断当前文档是否有效</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    BOOL AssertNode();</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">判断当前文档是否有效</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000">:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    CString m_sXmlFile;</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">xml文件路径</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    IXMLDOMDocumentPtr m_xmlDocument;</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">xml文本</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    IXMLDOMNodePtr m_xmlCurrentNode;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    IXMLDOMNamedNodeMapPtr m_xmlAttrbuteMaps;</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">节点属性列表</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    IXMLDOMNodeListPtr m_xmlMatchedList;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">long</span>
						<span style="COLOR: #000000"> m_Index;</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">当前节点位置</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    CString m_sCurrentNodeName;</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">当前节点的名称</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;</span>
		</div>这个类的主要思路就是遍历xml文档。所以你想要得到任何节点的值、属性之类的东西的话，都要首先从根节点开始找起。也许对于大多数的xml配置文件来说，这样操作比较不变。但是对于本程序来讲，要从大量的相同结构的子节点中找到需要的信息，也只能如此。另外，这样做的可编程性比较强，你可以把这些操作放到任何的循环、判断、递归中，以方便对于一系列信息的提取。<br />        下面从这个类中挑选一些方法进行进一步的说明。<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"><span style="COLOR: #000000">CMyXml::CMyXml()</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">构造函数</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">{<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化组件</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    HRESULT hr;<br />    hr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">CoInitialize(NULL);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化组件</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(FAILED(hr))<br />    {<br />        </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CMyErrors(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">创建COM组件时调用CoInitialize失败</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />    }<br />    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br />    {<br />        hr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m_xmlDocument.CreateInstance(_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Msxml.DOMDocument</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(FAILED(hr))</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断创建DOM对象失败</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        {<br />            </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CMyErrors(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">创建XmlDocument失败</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        }<br />    }<br />    <br />}</span></div>        CMyErrors是一个从CException继承的类，用这个类可以自定义异常信息。<br />        而我们的Dom对象就使用“<span style="COLOR: #000000">m_xmlDocument.CreateInstance(_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Msxml.DOMDocument</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))”这句话来进行创建。当然，别忘了，在创建之前还要使用“<span style="COLOR: #000000">CoInitialize(NULL)”进行初始化。关于细节方面的东西，还是go to MSDN吧。<br />         然后我们需要把xml内容从文件读入内存。在这里是这样操作的：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">BOOL CMyXml::LoadXmlFromFile(LPTSTR XmlFileName)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从xml文件读取信息</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">{<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从文件读入xml<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">打开并读入xml文件</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    _variant_t vt_Xmlpath(_T(XmlFileName));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">xml文件的路径</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    _variant_t vt_res(</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">(TRUE));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">读取情况的反应</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    vt_res</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m_xmlDocument</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">load(vt_Xmlpath);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将xml文件中的信息读取到DOM对象</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">(vt_res))<br />    {<br />        </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CMyErrors(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">打开xml文件失败</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br />    }<br />    m_sXmlFile</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">XmlFileName;<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">当前节点列为根节点列</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    m_xmlMatchedList</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m_xmlDocument</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">childNodes;<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">当前节点为根的第一个节点</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">MoveCurrentTo(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br />}</span></div></span></span>         这也很简单，除了使用封装好的union型VARIANT的_variant_t转换一下LPTSTR类型的传入参数（文件名）之外，就是使用IXMLDOMDocumentPtr-&gt;load这个方法装载xml文件到内存。具体内容在执行这步操作之后就被放到<span style="COLOR: #000000">m_xmlDocument的成员中了。然后我们用IXMLDOMNodeListPtr 的实例m_xmlMatchedList读入m_xmlDocument中的根节点，使用CMyXml的方法<span style="COLOR: #000000">MoveCurrentTo(0)来让当前节点指向m_xmlMatchedList这个节点列表中的第一个节点。<br />         下面说一下<span style="COLOR: #000000">MoveCurrentTo这个方法。<br />         
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">BOOL CMyXml::MoveCurrentTo(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> nIndex)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">移动当前结点</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">{<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断有效性</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">AssertDocument())<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">if(!AssertNode())<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">    return FALSE;<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">移动当前节点到节点列中指定位置</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(nIndex</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">m_xmlMatchedList</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">length)<br />    {<br />        </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CMyErrors(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">节点位置越界，执行函数MoveCurrentTo失败</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br />    }<br />    m_Index</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">nIndex;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断当前结点的位置</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    m_xmlMatchedList</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">get_item(nIndex,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m_xmlCurrentNode);<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取该节点所有属性，把结点列表里面位置是nIndex的结点保存到当前结点</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    m_xmlAttrbuteMaps</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m_xmlCurrentNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">attributes;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">保存结点属性到属性列表</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    CString sName((</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)m_xmlCurrentNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">nodeName);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把当前结点的名字保存到当前结点名字</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    m_sCurrentNodeName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sName;<br />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> TRUE;<br />}</span></div><p></p></span></span></span>        该方法的作用就是从当前读入的节点列表中移动位置。其中参数nIndex是目标位置，这个位置是从0开始的。使用IXMLDOMNodeListPtr-&gt;get_item方法将对应位置的节点放入当前节点<span style="COLOR: #000000">m_xmlCurrentNode</span>。然后顺便再用IXMLDOMNamedNodeMapPtr的实例m_xmlAttrbuteMap通过属性attributes获取当前节点的所有属性。最后把当前节点的名字保存到m_sCurrentNodeName中。这样我们算是获取了所要移动到的目标节点的所有信息。
<p>        假如想要从当前节点向上移动到它的父亲节点，在CMyXml中是这样实现的：<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">BOOL CMyXml::MoveToParent()</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">移动到父亲结点</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">{<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断有效性</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">AssertDocument())<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">AssertNode())<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">移动当前节点到父节点</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    IXMLDOMNodePtr XmlNode;<br />    XmlNode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m_xmlCurrentNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">parentNode;<br />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(XmlNode</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">NULL)<br />    {<br />        </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CMyErrors(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">不能获得当前节点的父节点</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br />    }<br />    m_xmlCurrentNode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">XmlNode;<br />    CString sName((</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)m_xmlCurrentNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">nodeName);<br />    m_sCurrentNodeName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sName;<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取节点属性</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    m_xmlAttrbuteMaps</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m_xmlCurrentNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">attributes;<br />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> TRUE;<br />}</span></div><br />        这和移动节点的方法没什么区别，只不过是采用了IXMLDOMNodePtr的parentNode这个属性。<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"><span style="COLOR: #000000">BOOL CMyXml::GetMatchedSubElementList(LPTSTR ElementName)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建匹配的元素序列</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">{<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从当前指向元素的子元素当中获取和所给名字匹配的元素列<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">执行此操作以后，节点列表将会指向返回的节点列<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断有效性</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">AssertDocument())<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">AssertNode())<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br />    m_xmlMatchedList</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m_xmlCurrentNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">selectNodes(_bstr_t(ElementName));<br />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_xmlMatchedList</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">length</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">没取到任何根结点的子结点</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    {<br />        </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CMyErrors(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">无法获取和当前节点匹配的节点列表,执行GetMatchedElementList()失败</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br />    }<br />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> TRUE;<br />}</span></div><p>       主要是使用了IXMLDOMNodePtr的selectNodes方法。<br />       以上是几个方法，在这里只是简单的描述一下。具体XmlDom中的方法，MSDN里面描述的非常清晰，这里不再多说。</p><p>       具体代码将会在稍后的时候给出。</p><img src ="http://www.cppblog.com/qzb2006e/aggbug/11307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2006-08-16 22:46 <a href="http://www.cppblog.com/qzb2006e/archive/2006/08/16/11307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>com方式调用matlab(三)</title><link>http://www.cppblog.com/qzb2006e/archive/2006/08/11/11138.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Fri, 11 Aug 2006 11:50:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2006/08/11/11138.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/11138.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2006/08/11/11138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/11138.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/11138.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 目录        com方式调用matlab(一)        com方式调用matlab(二)         com方式调用matlab(三)        com方式调用matlab(四)         com方式调用matlab(五)        com方式调用matlab(六)        com方式调用matlab(附:运行结果及代码)        在前面粗略描述了系统的设...&nbsp;&nbsp;<a href='http://www.cppblog.com/qzb2006e/archive/2006/08/11/11138.html'>阅读全文</a><img src ="http://www.cppblog.com/qzb2006e/aggbug/11138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2006-08-11 19:50 <a href="http://www.cppblog.com/qzb2006e/archive/2006/08/11/11138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>com方式调用matlab(二) </title><link>http://www.cppblog.com/qzb2006e/archive/2006/08/10/11108.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Thu, 10 Aug 2006 12:59:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2006/08/10/11108.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/11108.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2006/08/10/11108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/11108.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/11108.html</trackback:ping><description><![CDATA[         目录<br />        <a class="" title="" href="/qzb2006e/archive/2006/08/09/11064.html" target="">com方式调用matlab(一)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/10/11108.html" target="">com方式调用matlab(二)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/11/11138.html" target="">com方式调用matlab(三)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/16/11307.html" target="">com方式调用matlab(四)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/21/11538.html" target="">com方式调用matlab(五)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11797.html" target="">com方式调用matlab(六)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11802.html" target="">com方式调用matlab(附:运行结果及代码)</a><br />        虽然说已经有很多的文章介绍如何在matlab下面将m文件封装为com组件,但是这里为了保障完整性,这里还是把过程详细描述一下.<br />        
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'">  </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编写</span><span lang="EN-US">m</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打开</span><span lang="EN-US">Matlab6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，依次选择</span><span lang="EN-US">File-&gt;New-&gt;M-File</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，创建一个</span><span lang="EN-US">M</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，并键入如下信息：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img height="437" alt="matlab3.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlab3.JPG" width="651" border="0" /><br /><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">测试可运行后，保存并关闭。这里保存得文件名为</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-size: 12.0pt">draw2D.m</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">。回到主界面。<br /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman">2、<span style="FONT: 7pt 'Times New Roman'">  </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">生成组件</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在主界面中键入如下命令并回车：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">Comtool</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><img height="576" alt="matlab4.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlab4.JPG" width="768" border="0" /><br /></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此时进入组件创建界面。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">此时，在菜单中依次选择</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-size: 12.0pt">File-&gt;New Project…</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">。<br /><img height="420" alt="matlab5.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlab5.JPG" width="560" border="0" /><br /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则进入组件配置界面。参照下图进行配置。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其中</span><span lang="EN-US"><font face="Times New Roman">Component name</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为组件名称。在这里命名为</span><span lang="EN-US"><font face="Times New Roman">c1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以前的</span><span lang="EN-US"><font face="Times New Roman">Classes</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">处会自动填入“</span><span lang="EN-US"><font face="Times New Roman">c1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”。这里我们选中</span><span lang="EN-US"><font face="Times New Roman">c1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点</span><span lang="EN-US"><font face="Times New Roman">Remove</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将原名称移除，并在</span><span lang="EN-US"><font face="Times New Roman">Class name</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中填入“</span><span lang="EN-US"><font face="Times New Roman">Draw2D</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”，点</span><span lang="EN-US"><font face="Times New Roman">Add&gt;&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">Project directory</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为组件的保存路径。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">Compile code in</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选项选择</span><span lang="EN-US"><font face="Times New Roman">C++</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">Compiler options</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中按照如图进行钩选。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点</span><span lang="EN-US"><font face="Times New Roman">OK</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这样就创建好了一个组件的配置。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><img height="484" alt="matla6.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matla6.JPG" width="280" border="0" /><br /></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点</span><span lang="EN-US"><font face="Times New Roman">ok</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">回到组建创建界面。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后选中</span><span lang="EN-US"><font face="Times New Roman">Draw2D</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，依次在菜单上选择</span><span lang="EN-US"><font face="Times New Roman">Project-&gt;Add File…</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">引入刚才编写的</span><span lang="EN-US"><font face="Times New Roman">m</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><img height="420" alt="matlab7.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlab7.JPG" width="560" border="0" /><br /><img height="252" alt="matlab8.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlab8.JPG" width="439" border="0" /><br /></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点“打开”，这样就在组件中引入了</span><span lang="EN-US"><font face="Times New Roman">m</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后回到组件创建界面，依次选择菜单中的</span><span lang="EN-US"><font face="Times New Roman">Build-&gt;Com Object</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><img height="420" alt="matlab9.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlab9.JPG" width="560" border="0" /><br /><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">因为可能要在没有安装</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-size: 12.0pt">matlab</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">的电脑上面搭建环境，所以这里我们顺便打个包，为搭建环境进行准备。依次选择菜单上面的</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-size: 12.0pt">Component-&gt;Package Component</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">。<br /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在步骤</span><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的最后，我们看一下文件的输出结果。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US"><font face="Times New Roman">c1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的工作目录中看到这样一些文件。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><img height="600" alt="matlab10.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlab10.JPG" width="660" border="0" /><br /></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其中文件夹</span><span lang="EN-US"><font face="Times New Roman">src</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面是在编写</span><span lang="EN-US"><font face="Times New Roman">c++</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序中能够引入的头文件和接口定义文件、类定义文件等文件。</span><span lang="EN-US"><font face="Times New Roman">Distrib</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中是生成的组件组件文件。首先看一下</span><span lang="EN-US"><font face="Times New Roman">distrib </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件夹。<img height="113" alt="matlab11.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlab11.JPG" width="593" border="0" /><br /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman">C1.exe</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为打包文件，用于进行环境搭建。</span><span lang="EN-US"><font face="Times New Roman">C1_1_0.dll</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是构建的组件库文件。其他文件我们不用关心。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们在再一下</span><span lang="EN-US"><font face="Times New Roman">src</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件夹。里面包含很多文件。<br /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><img height="423" alt="matlab12.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlab12.JPG" width="624" border="0" /><br /></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里我们只关心</span><span lang="EN-US"><font face="Times New Roman">c1_idl_i.c</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US"><font face="Times New Roman">c1_com.cpp</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，因为其中包含了我们需要的组件的GUID、接口的RIID以及方法的定义。至于配置文件的内容定义等方面的内容将放到下一部分说明。</span></p><img src ="http://www.cppblog.com/qzb2006e/aggbug/11108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2006-08-10 20:59 <a href="http://www.cppblog.com/qzb2006e/archive/2006/08/10/11108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>com方式调用matlab(一)</title><link>http://www.cppblog.com/qzb2006e/archive/2006/08/09/11064.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Wed, 09 Aug 2006 14:32:00 GMT</pubDate><guid>http://www.cppblog.com/qzb2006e/archive/2006/08/09/11064.html</guid><wfw:comment>http://www.cppblog.com/qzb2006e/comments/11064.html</wfw:comment><comments>http://www.cppblog.com/qzb2006e/archive/2006/08/09/11064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qzb2006e/comments/commentRss/11064.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qzb2006e/services/trackbacks/11064.html</trackback:ping><description><![CDATA[
		<p dir="ltr" style="MARGIN-RIGHT: 0px">        目录<br />        <a class="" title="" href="/qzb2006e/archive/2006/08/09/11064.html" target="">com方式调用matlab(一)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/10/11108.html" target="">com方式调用matlab(二)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/11/11138.html" target="">com方式调用matlab(三)</a><br />        <a class="" title="" href="/qzb2006e/archive/2006/08/16/11307.html" target="">com方式调用matlab(四)</a> <br />        <a class="" title="" href="/qzb2006e/archive/2006/08/21/11538.html" target="">com方式调用matlab(五)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11797.html" target="">com方式调用matlab(六)<br /></a>        <a class="" title="" href="/qzb2006e/archive/2006/08/28/11802.html" target="">com方式调用matlab(附:运行结果及代码)<br /></a>        前一阵子同学叫我帮忙做毕业设计,内容是从c++程序环境当中调用matlab进行绘图.我之前从来没有接触过matlab,但是我对c++还是多少有点了解.并且同学也把上一届做好的论文拿来了,里面有比较详细的介绍,特别是关键的代码部分,写得也比较清楚.所以我觉得这个任务没什么困难的.估计按照论文上面按部就班的做,大概一个晚上就能完成.同学给了我一个周的时间,应该算是绰绰有余了.于是我就有了这样的打算,看看能不能通过其他的方法实现matlab绘图功能的调用.因为毕竟是上一届的论文,答辩的时候"穿帮"就不好了.<br />        我从网上搜索了一下,发现了基于com的matlab编程的一系列文章,当然刊登这些文章的网站、论坛什么的都挺多，我也分不清出处了。不过最全的应该是在vc知识库网站上。我以前曾经看过一些com的书籍和文章，并且对之也有少许了解。所以我就决定了以此方式来完成这次毕业设计。并且确实实现了，在设计过程当中感觉自己学到了不少东西，又担心学的这些东西会随着时间渐渐淡忘，所以在这里整理一下，希望能给需要进行相关设计的人提供一点帮助，也为自己的知识留下一点痕迹。<br />        我的思路是这样的：<br />        1、用matlab6的comtool工具把m文件转换成为com组件。<br />        2、在c++中在不引入tlb的前提下调用com组件。<br />        第一步确实不是什么问题。因为你从任何搜索引擎里面输入"com matlab"都能获取大量的相关介绍。<br />        要做第二步的话就要先研究一下matlab生成的com组件的情况了。我打开comtool生成的那些.c和.h文件看了一下，发现其中接口是从IDispatch继承的。OK，实现这一步也不是问题。这样我的vc程序雏形就有了：<br />         写一个程序配置文件，其中包含所有要调用的matlab组件，以及它们的接口、方法的信息。<br />         在vc程序中读取配置文件，动态生成输入界面，在录入参数并触发相关按钮事件后绘制图形。<br />         然后基于这个思路，我大体上绘制了类图。当然我对于visio还是个初学者，对于UML的相关知识也是一知半解，但是我觉得这个图应当能够基本上能够反映出我的意思。<br />         <img height="464" alt="matlabcom1.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlabcom1.JPG" width="499" border="0" /><br />         主要调用流程为：<br />         <br />     <img height="299" alt="matlabcom2.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlabcom2.JPG" width="458" border="0" /><br />          下面是从用matlab6编写m文件直到用vc程序调用matlab组件绘图的完整流程。<br />          <img height="325" alt="matlabcom3.JPG" src="http://www.cppblog.com/images/cppblog_com/qzb2006e/matlabcom3.JPG" width="498" border="0" /></p>
		<p>
				<br />         </p>
<img src ="http://www.cppblog.com/qzb2006e/aggbug/11064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qzb2006e/" target="_blank">littlegai</a> 2006-08-09 22:32 <a href="http://www.cppblog.com/qzb2006e/archive/2006/08/09/11064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>