??xml version="1.0" encoding="utf-8" standalone="yes"?>国内精品久久久久久野外,精品无码久久久久久久动漫,久久综合狠狠综合久久综合88http://m.shnenglu.com/qzb2006e/category/2342.htmlzh-cnThu, 22 May 2008 22:52:05 GMTThu, 22 May 2008 22:52:05 GMT60一道Sqlserver面试?/title><link>http://m.shnenglu.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://m.shnenglu.com/qzb2006e/archive/2008/05/01/48596.html</guid><wfw:comment>http://m.shnenglu.com/qzb2006e/comments/48596.html</wfw:comment><comments>http://m.shnenglu.com/qzb2006e/archive/2008/05/01/48596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qzb2006e/comments/commentRss/48596.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qzb2006e/services/trackbacks/48596.html</trackback:ping><description><![CDATA[前几天去面试Q考官Z一道sql题,当时没多考虑qZ{案Q后来回来一x知道错了?br><img alt="" src="http://m.shnenglu.com/images/cppblog_com/qzb2006e/table.JPG" height="163" width="177"><br>题目很简单,昄aname中重复的W一?br>{案应当如此Q调试通过Q?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  <br>另外出第m行到Wn行数据的题也比较常见<br>不过应当注意是否包含Wm行,如果包含Wm行,则应该(q是针对上面的表Q:<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://m.shnenglu.com/qzb2006e/aggbug/48596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qzb2006e/" target="_blank">littlegai</a> 2008-05-01 17:44 <a href="http://m.shnenglu.com/qzb2006e/archive/2008/05/01/48596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>撤销和重做(命o模式Q?/title><link>http://m.shnenglu.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://m.shnenglu.com/qzb2006e/archive/2008/03/16/44654.html</guid><wfw:comment>http://m.shnenglu.com/qzb2006e/comments/44654.html</wfw:comment><comments>http://m.shnenglu.com/qzb2006e/archive/2008/03/16/44654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qzb2006e/comments/commentRss/44654.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qzb2006e/services/trackbacks/44654.html</trackback:ping><description><![CDATA[<p><img src="http://m.shnenglu.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/723defda9868_14D7A/clip_image002_5.gif" height="248" width="554"></p> <p>1、命令管理器理命o</p> <p><a href="http://m.shnenglu.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/723defda9868_14D7A/clip_image0023.gif" atomicselection="true"><img alt="clip_image0023" src="http://m.shnenglu.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/723defda9868_14D7A/clip_image0023_thumb.gif" height="666" width="553"></a></p> <p>void testCommandManagerArrangeCommand()<br>{<br>    cout<<">>>>>>>>>>>>命o理器调度命? <<<<<<<<<<<<"<<endl;<br>    CDeleteCommand *pCommand1=new CDeleteCommand("obj1");<br>    CDeleteCommand *pCommand2=new CDeleteCommand("obj2");<br>    CDeleteCommand *pCommand3=new CDeleteCommand("obj3");<br>    CDeleteCommand *pCommand4=new CDeleteCommand("obj4"); </p> <p>    CCommandManager manager;<br>    manager.Do(pCommand1);<br>    manager.Do(pCommand2);<br>    manager.Do(pCommand3);<br>    manager.Undo();<br>    manager.Undo();<br>    manager.Redo();<br>    manager.Undo();<br>    manager.Do(pCommand4);<br>    manager.Undo();<br>    manager.Redo();<br>}</p> <p>执行效果Q?/p> <p>>>>>>>>>>>>>命o理器调度命?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、命令管理器理命o理?</p> <p><img src="http://m.shnenglu.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/723defda9868_14D7A/clip_image002_6.gif" height="930" width="455"> </p> <p>//命o理器调度命令管理器<br>void testCommandManagerArrangeCommandManager()<br>{<br>    cout<<">>>>>>>>>>>>命o理器调度命令管? ?lt;<<<<<<<<<<<"<<endl;<br>    CDeleteCommand *pCommand1=new CDeleteCommand("cm1--obj1");<br>    CDeleteCommand *pCommand2=new CDeleteCommand("cm1--obj2");<br>    CDeleteCommand *pCommand3=new CDeleteCommand("cm1--obj3");<br>    CDeleteCommand *pCommand4=new CDeleteCommand("cm2--obj1");<br>    CDeleteCommand *pCommand5=new CDeleteCommand("cm2--obj2");<br>    CDeleteCommand *pCommand6=new CDeleteCommand("cm2--obj3");<br>    CCommandManager cm1;<br>    CCommandManager cm2;<br>    CCommandManager cmMain;<br>    cm1.SetParentCommandManager(&cmMain);<br>    cm2.SetParentCommandManager(&cmMain);<br>    cm1.Do(pCommand1);<br>    cm2.Do(pCommand4);<br>    cm1.Do(pCommand2);<br>    cm2.Do(pCommand5);<br>    cm1.Do(pCommand3);<br>    cm2.Do(pCommand6);<br>    cmMain.Undo();<br>    cmMain.Undo();<br>    cmMain.Undo();<br>    cmMain.Redo();<br>    cmMain.Undo(); </p> <p>} </p> <p>执行效果Q?</p> <p>>>>>>>>>>>>>命o理器调度命令管理器<<<<<<<<<<<<<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>注意Q?</p> <p>1、确保命令的Execute和UnExecute是完全可逆的操作?</p> <p>2、要保障Execute和UnExecute的可逆性,特别要关注他们执行的环境Q比如绘囄时候,q些操作要有同样的尺寸标准,否则很难实现互逆的操作Q?</p> <p>3、注意不要插入空命o?/p> <p><a href="http://m.shnenglu.com/Files/qzb2006e/CommonModeTestAdv.rar" title="代码">代码</a><br> </p><img src ="http://m.shnenglu.com/qzb2006e/aggbug/44654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qzb2006e/" target="_blank">littlegai</a> 2008-03-16 23:23 <a href="http://m.shnenglu.com/qzb2006e/archive/2008/03/16/44654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net赋值控?1)http://m.shnenglu.com/qzb2006e/archive/2007/08/12/29833.htmllittlegailittlegaiSun, 12 Aug 2007 09:00:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/08/12/29833.htmlhttp://m.shnenglu.com/qzb2006e/comments/29833.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/08/12/29833.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/29833.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/29833.htmlq一步研I服务器端控Ӟ然后把代码修改了一下,现在面上看上去会是q个样子Q?br>

<form id="form1" runat="server">
        
<div>
            
<uc1:WebUserControl ID="WebUserControl1" runat="server"></uc1:WebUserControl>
            
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div>
        
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        
<!-- 为Control讄ViewState?nbsp;-->
        
<cus:SetViewStateValueToControl ID="SetViewStateValueToControl1" KeyName="HelloWorld"
            runat
="server">
            
<SetValueItems>
                
<cus:SetValueItem ControlId="WebUserControl1" ControlPropertyName="Text" PropertyName="Word" />
            
</SetValueItems>
        
</cus:SetViewStateValueToControl>
        
<!-- 为Control讄Session?/span>-->
        
<cus:SetSessionValueToControl runat="server" ID="SetSessionValueToControl1" KeyName="HelloWorld">
        
<SetValueItems>
        
<cus:SetValueItem ControlId="TextBox1" ControlPropertyName="Text" PropertyName="Word" />
        
</SetValueItems>
        
</cus:SetSessionValueToControl>
    
</form>

KeyNameQSession或ViewState的KeyQ?br>ControlIdQ要被赋值的控gQ?br>ControlPropertyNameQ要被赋值的控g属性;
PropertyNameQSession或ViewState中保存的对象的一个属性,q个属性g被赋l控件?br>代码



littlegai 2007-08-12 17:00 发表评论
]]>
asp.net赋值控?0)http://m.shnenglu.com/qzb2006e/archive/2007/08/10/29727.htmllittlegailittlegaiFri, 10 Aug 2007 15:18:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/08/10/29727.htmlhttp://m.shnenglu.com/qzb2006e/comments/29727.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/08/10/29727.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/29727.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/29727.html ׃L不喜Ƣ在面的后C码中写太多的东西Q当然更不喜Ƣinline的页面写法,所以这里我做了一个服务器端的控gQ这个控件的作用是赋倹{从Session或ViewState里面取|q赋l页面中的Q一个控件。比如:

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div>
        
<cus:SetValue runat="server" ContainerType="Session" ContainerName="Session1" ExpressionSourcePropertyName="Word" DestControlName="TextBox1" DestControlPropertyName="Text" ID="SetValue1"></cus:SetValue>
在页面中有一个TextBoxQ它的Id是TextBox1,我在面中放|一个赋值控件SetValueQ从Session里面取得一个对象,q把q个对象中的Word属性赋值给TextBox1的Text属性?br>在这里简单定义了一下:
ContainerTypeQ容器类型。Session或ViewState?br>ContainerNameQ容器的名称。即Session或ViewState的键名称?br>ExpressionSourcePropertyNameQ存在Session或ViewState的对象中的要取得的属性名?br>DestControlIdQ被赋值的控gId?br>DestControlPropertyNameQ被赋值控件的属性名?br>代码


littlegai 2007-08-10 23:18 发表评论
]]>
W一个QTE序http://m.shnenglu.com/qzb2006e/archive/2007/07/31/29041.htmllittlegailittlegaiTue, 31 Jul 2007 15:33:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/07/31/29041.htmlhttp://m.shnenglu.com/qzb2006e/comments/29041.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/07/31/29041.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/29041.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/29041.html阅读全文

littlegai 2007-07-31 23:33 发表评论
]]>
Qt+Dev cpp环境配置http://m.shnenglu.com/qzb2006e/archive/2007/07/25/28786.htmllittlegailittlegaiWed, 25 Jul 2007 15:50:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/07/25/28786.htmlhttp://m.shnenglu.com/qzb2006e/comments/28786.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/07/25/28786.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/28786.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/28786.htmlq是模板文gQ?br>

littlegai 2007-07-25 23:50 发表评论
]]>
一个用于进行文件上传的dllhttp://m.shnenglu.com/qzb2006e/archive/2007/06/10/25995.htmllittlegailittlegaiSun, 10 Jun 2007 13:36:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/10/25995.htmlhttp://m.shnenglu.com/qzb2006e/comments/25995.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/10/25995.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/25995.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/25995.htmlq是06q?月䆾左右制作的一个小玩意.在windowsq_下的M语言中引入这个dll,可以进行文件的上传?东西不是很成?另外׃接受Ҏ一个webE序,安全性也差些,所以开发出来以后就没有再?当然难说以后会不会用得到,当是在q里做个备䆾?
文g夹说?
upload.一个动态库,装了上传文件的一个函?使用vc7~写;
UploadTest:一个webE序,可以接受文g;
pb_testupload:是一个用pbq行调用的例?例子所引用的dll有点?要想使用新版本的?q需要修改一?
pb例子
上传dll
文g接受E序



littlegai 2007-06-10 21:36 发表评论
]]>
com方式调用matlab(?q行l果及代? http://m.shnenglu.com/qzb2006e/archive/2006/08/28/11802.htmllittlegailittlegaiMon, 28 Aug 2006 14:04:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/28/11802.htmlhttp://m.shnenglu.com/qzb2006e/comments/11802.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/28/11802.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11802.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11802.html         目录
        com方式调用matlab(一)
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(?
        com方式调用matlab(?q行l果及代?       
        以下为程序的q行l果Q?br />result.JPG
        代码



littlegai 2006-08-28 22:04 发表评论
]]>
com方式调用matlab(?http://m.shnenglu.com/qzb2006e/archive/2006/08/28/11797.htmllittlegailittlegaiMon, 28 Aug 2006 13:41:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/28/11797.htmlhttp://m.shnenglu.com/qzb2006e/comments/11797.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/28/11797.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11797.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11797.html阅读全文

littlegai 2006-08-28 21:41 发表评论
]]>
com方式调用matlab(?http://m.shnenglu.com/qzb2006e/archive/2006/08/21/11538.htmllittlegailittlegaiMon, 21 Aug 2006 12:13:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/21/11538.htmlhttp://m.shnenglu.com/qzb2006e/comments/11538.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/21/11538.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11538.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11538.html        com方式调用matlab(一)
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(?
        com方式调用matlab(?q行l果及代?
        在明了如何d配置文g以后Q现在我们如何将配置文g的信息反馈给用户呢?
        用户当然要通过用户界面和我们程序所提供的一切功能打交道。我们当然不希望一下子把配|文仉面这么多信息一下子全都提供l用P那么考虑用这样一U所谓“联动”的方式Q就是说当用户从下拉列表中选择一个配|名U后Q就列出该配|的所有信息。这样似乎要E微友好一些。另外我们还需要允许用戯够修攚w|内容,q样q要从这些动态生成的控g中取得数倹{说到这里,肯定大家会想到STL中的Map或List。恩Q确实可以这样实玎ͼ但是我们有MFCQ我们用CTypedPtrMap?br />        下面是相关的cd义:
       
class CEditCtrlFactory
{
public:
    
//属?/span>
     CTypedPtrMap<CMapStringToPtr,CString,CWnd*> m_ctrlMap;
public:
    CEditCtrlFactory(
void);
    
~CEditCtrlFactory(void);
    CWnd
* createCtrl(CWnd *wnd,CString typeName,CString attributeName,CRect rect);//创徏控g对象
    CWnd* getCtrl(CString attributeName);
    
void disposeAll();
private:
    
//U有Ҏ
    
};

        q里是用了CTypedPtrMapQ声明了一个变量m_ctrlMapQ它的烦引是一个CString型变量,然后内容Z个CWnd型的指针。我们知道,一切窗体、按钮等{的东西都是从CWndl承的。我们用CWnd来代指一切需要动态生成的控gQ其实在q个E序中,主要动态生成CEdit型和CStatic型控ӞQ这应当是一个装操作了吧?/p>

        ҎcreateCtrl用来创徏控gQƈ攑ֈMap里面QgetCtrl用来从Map中取得相应的控g对象?br />        下面是createCtrl的详l实玎ͼ
       

CWnd* CEditCtrlFactory::createCtrl(CWnd *wnd,CString typeName,CString attributeName,CRect rect)
{
    
//创徏cedit对象
    if(typeName=="CEdit")
    {
        CEdit 
*pEdit = new CEdit();
        pEdit
->CreateEx(WS_EX_CLIENTEDGE,"EDIT""", WS_CHILD|WS_VISIBLE,rect,wnd,0);
        
//加入映射?/span>
        m_ctrlMap[attributeName]=pEdit;
        
return pEdit;
    }
    
if(typeName=="CStatic")
    {
        CStatic 
*pStatic=new CStatic();
        pStatic
->Create(attributeName,WS_CHILD|WS_VISIBLE,rect,wnd);
        m_ctrlMap[attributeName]
=pStatic;
        
return pStatic;
    }
    
return NULL;
}

        其实很简单,是用CreateExq个Ҏ。参数wnd为容U个控件的H体,rect指明了控件的位置。其他参数都是些宏定义。然后用"m_ctrlMap[attributeName]=控g指针"q句话来把控件放入Map。假如C++能够支持点反之cȝ语法的话Q这一部分可以写得有趣些,但是据我所知,好像不行Q另外听说可以通过定义一些宏之类的东西可以间接实玎ͼq都是我能力之所不及的,有兴的人可以自己实c?br />        下面是getCtrl()q个Ҏ的实玎ͼ
       
CWnd* CEditCtrlFactory::getCtrl(CString attributeName)
{
    
//从映表中取得cedit对象
    CWnd *pWnd;
    m_ctrlMap.Lookup(attributeName,pWnd);
    
return pWnd;
}
        用了CTypedPtrMap.lookup来根据控件名字来查找控g对象?br />        最后,q需要释放这些对象:
}
void CEditCtrlFactory::disposeAll()
{
    
//删除所有edit对象
    for (POSITION pos =m_ctrlMap.GetStartPosition(); pos; )
    {
        CWnd 
*pWnd=0;
        m_ctrlMap.GetNextAssoc(pos, CString(
""), pWnd);
        delete pWnd;
    }
    m_ctrlMap.RemoveAll();
}
        是不停的通过GetNextAssoc取得Map中的对象指针Q然后释放之。最后清I整个Map?br />        到这里,两个工具cd介绍完毕了?img src ="http://m.shnenglu.com/qzb2006e/aggbug/11538.html" width = "1" height = "1" />

littlegai 2006-08-21 20:13 发表评论
]]>
com方式调用matlab(?http://m.shnenglu.com/qzb2006e/archive/2006/08/16/11307.htmllittlegailittlegaiWed, 16 Aug 2006 14:46:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/16/11307.htmlhttp://m.shnenglu.com/qzb2006e/comments/11307.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/16/11307.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11307.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11307.html         目录
        com方式调用matlab(一)
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(?
        com方式调用matlab(?q行l果及代?
        怿看了上一部分的介l?已经有h不需要往下l看?因ؓ技术方面就是如?况且代码写得也不是很严}.当然,前面也说q?q里只是为大家提供一U思\,l没有用q这U方式的人提供一U参考意?l很用到过lg的h提供一点组件方面的知识,当然,有些东西也许不是合理合法?具体的一?您可以去看一下MSDN.
         好了,闲话p到这?上一部分的代码所涉及的一些知?在以后会介绍?本部分先说一说前面提到的几个工具c?

        首先lg的相关信息是攑֜xml配置文g里面?要想使用q个配置文g,׃得不用到xml的parser,当然我们在windows底下写程?微Y已经提供了一个封装好的强有力的工具——XmlDom。其中提供了很多有用的类和接口。用q些东西操作xml是非常简单的。不q对于目前我们调用matlablg的程序来Ԍq不一定都能够用到。另外,我还希望能够在我的配|文仉面进行遍历的操作。所以我自行把感兴趣的一些操作按照自q调用方式装了一下。下面是关于q个cȝ定义情况Q?br />

class  CMyXml  
{
    
// 本函数可以访问Q意CMyXmlcd象的U有变量
    friend CMyXml::AppendChild(CMyXml xml);
public :
    BOOL AppendChild(CMyXml xml);
// xml指定节点附加为子节点
    _bstr_t GetDocXml(); // 获取xml文档内容
    BOOL GetChildNodes(); // 获取当前节点所有子节点
    BOOL DeleteNode(); // 删除当前节点
    BOOL CreateNewNode(LPTSTR NodeName); // 从当前节点创建子节点
    BOOL AddAttrbuteDefinition(LPTSTR AttrbuteName); // 为当前节点增加属?/span>
    BOOL DeleteAttrbuteDefinition(LPTSTR AttrbuteName); // 为当前节点删除属?/span>
    _bstr_t GetAttrbuteValue(LPTSTR AttrbuteName); // 获取节点?/span>
    BOOL SetAttrbuteValue(LPTSTR AttrbuteName,LPTSTR AttrbuteValue); // 讄节点?/span>
    _bstr_t GetCurrentNodeValue(); // 获取当前节点的?/span>
    BOOL SetCurrentNodeValue(LPTSTR NodeValue); // 讄当前节点的?/span>
    BOOL MoveToParent(); // Ud当前节点到父节点
    BOOL MoveCurrentTo( long  nIndex); // Ud当前节点到节点列中指定位|?/span>
    BOOL LoadXmlFromFile(LPTSTR XmlFileName); // 从文件读入xml
    BOOL LoadXmlFromString(LPTSTR XmlDocSTR); // 从字W串dxml
    BOOL GetMatchedSubElementList(LPTSTR ElementName); // 从当前指向元素的子元素当中获取和所l名字匹配的元素?/span>
    BOOL GetMatchedParentElementList(LPTSTR ElementName); // 从当前节点的父节点的所有子节点中获取和所l名字所匚w的元素列
    BOOL GetMatchedRootElementList(LPTSTR ElementName); // 从根节点中获取匹配的节点?/span>
    CString GetCurrentNodeName(); // 获取当前节点的名U?/span>
     long  GetCurrentIndex(); // 获取当前节点的位|?/span>
     long  GetCurrentListLength(); // 获取当前节点列元素个?/span>
    BOOL Save(); // 保存xml
    BOOL SaveAs(LPTSTR Filename); // 另存?/span>
    CMyXml();
    
virtual   ~ CMyXml();
    
private :
    
// U有Ҏ
    BOOL AssertDocument(); // 判断当前文档是否有效
    BOOL AssertNode(); // 判断当前文档是否有效
private :
    CString m_sXmlFile;
// xml文g路径
    IXMLDOMDocumentPtr m_xmlDocument; // xml文本
    IXMLDOMNodePtr m_xmlCurrentNode;
    IXMLDOMNamedNodeMapPtr m_xmlAttrbuteMaps;
// 节点属性列?/span>
    IXMLDOMNodeListPtr m_xmlMatchedList;
    
long  m_Index; // 当前节点位置
    CString m_sCurrentNodeName; // 当前节点的名U?/span>



}
;
q个cȝ主要思\是遍历xml文档。所以你惌得到M节点的倹{属性之cȝ东西的话Q都要首先从根节点开始找赗也许对于大多数的xml配置文g来说Q这h作比较不变。但是对于本E序来讲Q要从大量的相同l构的子节点中找到需要的信息Q也只能如此。另外,q样做的可编E性比较强Q你可以把这些操作放CQ何的循环、判断、递归中,以方便对于一pd信息的提取?br />        下面从这个类中挑选一些方法进行进一步的说明?br />        首先是构造函敎ͼ
        
CMyXml::CMyXml()//构造函?/span>
{
    
//初始化组?/span>
    HRESULT hr;
    hr
=CoInitialize(NULL);//初始化组?/span>
    if(FAILED(hr))
    {
        
throw new CMyErrors("创徏COMlg时调用CoInitializep|");
    }
    
else
    {
        hr
=m_xmlDocument.CreateInstance(_T("Msxml.DOMDocument"));
        
if(FAILED(hr))//判断创徏DOM对象p|
        {
            
throw new CMyErrors("创徏XmlDocumentp|");
        }
    }
    
}
        CMyErrors是一个从CExceptionl承的类Q用q个cd以自定义异常信息?br />        而我们的Dom对象׃用?span style="COLOR: #000000">m_xmlDocument.CreateInstance(_T("Msxml.DOMDocument"))”这句话来进行创建。当Ӟ别忘了,在创Z前还要用?span style="COLOR: #000000">CoInitialize(NULL)”进行初始化。关于细节方面的东西Q还是go to MSDN吧?br />         然后我们需要把xml内容从文件读入内存。在q里是这h作的Q?br />
BOOL CMyXml::LoadXmlFromFile(LPTSTR XmlFileName)//从xml文gd信息
{
    
//从文件读入xml
    
//打开q读入xml文g
    _variant_t vt_Xmlpath(_T(XmlFileName));//xml文g的\?/span>
    _variant_t vt_res(bool(TRUE));//d情况的反?/span>
    vt_res=m_xmlDocument->load(vt_Xmlpath);//xml文g中的信息d到DOM对象
    if(!bool(vt_res))
    {
        
throw new CMyErrors("打开xml文gp|");
        
return FALSE;
    }
    m_sXmlFile
=XmlFileName;
    
//当前节点列ؓ根节点列
    m_xmlMatchedList=m_xmlDocument->childNodes;
    
//当前节点为根的第一个节?/span>
    return this->MoveCurrentTo(0);
}
         q也很简单,除了使用装好的union型VARIANT的_variant_t转换一下LPTSTRcd的传入参敎ͼ文g名)之外Q就是用IXMLDOMDocumentPtr->loadq个Ҏ装蝲xml文g到内存。具体内容在执行q步操作之后p攑ֈm_xmlDocument的成员中了。然后我们用IXMLDOMNodeListPtr 的实例m_xmlMatchedListdm_xmlDocument中的根节点,使用CMyXml的方?span style="COLOR: #000000">MoveCurrentTo(0)来让当前节点指向m_xmlMatchedListq个节点列表中的W一个节炏V?br />         下面说一?span style="COLOR: #000000">MoveCurrentToq个Ҏ?br />        
BOOL CMyXml::MoveCurrentTo(long nIndex)//Ud当前l点
{
    
//判断有效?/span>
    if(!AssertDocument())
        
return FALSE;
    
//if(!AssertNode())
    
//    return FALSE;
    
//Ud当前节点到节点列中指定位|?/span>
    if(nIndex>=m_xmlMatchedList->length)
    {
        
throw new CMyErrors("节点位置界Q执行函数MoveCurrentTop|");
        
return FALSE;
    }
    m_Index
=nIndex;//判断当前l点的位|?/span>
    m_xmlMatchedList->get_item(nIndex,&m_xmlCurrentNode);
    
//获取该节Ҏ有属性,把结点列表里面位|是nIndex的结点保存到当前l点
    m_xmlAttrbuteMaps=m_xmlCurrentNode->attributes;//保存l点属性到属性列?/span>
    CString sName((char*)m_xmlCurrentNode->nodeName);//把当前结点的名字保存到当前结点名?/span>
    m_sCurrentNodeName=sName;
    
return TRUE;
}

        该方法的作用是从当前读入的节点列表中移动位|。其中参数nIndex是目标位|,q个位置是从0开始的。用IXMLDOMNodeListPtr->get_itemҎ对应位|的节点攑օ当前节点m_xmlCurrentNode。然后顺便再用IXMLDOMNamedNodeMapPtr的实例m_xmlAttrbuteMap通过属性attributes获取当前节点的所有属性。最后把当前节点的名字保存到m_sCurrentNodeName中。这h们算是获取了所要移动到的目标节点的所有信息?

        假如惌从当前节点向上移动到它的父亲节点Q在CMyXml中是q样实现的:

BOOL CMyXml::MoveToParent()//Ud到父亲结?/span>
{
    
//判断有效?/span>
    if(!AssertDocument())
        
return FALSE;
    
if(!AssertNode())
        
return FALSE;
    
//Ud当前节点到父节点
    IXMLDOMNodePtr XmlNode;
    XmlNode
=m_xmlCurrentNode->parentNode;
    
if(XmlNode==NULL)
    {
        
throw new CMyErrors("不能获得当前节点的父节点");
        
return FALSE;
    }
    m_xmlCurrentNode
=XmlNode;
    CString sName((
char*)m_xmlCurrentNode->nodeName);
    m_sCurrentNodeName
=sName;
    
//获取节点属?/span>
    m_xmlAttrbuteMaps=m_xmlCurrentNode->attributes;
    
return TRUE;
}

        q和Ud节点的方法没什么区别,只不q是采用了IXMLDOMNodePtr的parentNodeq个属性?br />        另外用以下方法获取当前节点的所有同名子节点Q?br />
BOOL CMyXml::GetMatchedSubElementList(LPTSTR ElementName)//创徏匚w的元素序?/span>
{
    
//从当前指向元素的子元素当中获取和所l名字匹配的元素?br />    //执行此操作以后,节点列表会指向q回的节点列
    
//判断有效?/span>
    if(!AssertDocument())
        
return FALSE;
    
if(!AssertNode())
        
return FALSE;
    m_xmlMatchedList
=m_xmlCurrentNode->selectNodes(_bstr_t(ElementName));
    
if(m_xmlMatchedList->length==0)//没取CQ何根l点的子l点
    {
        
throw new CMyErrors("无法获取和当前节点匹配的节点列表,执行GetMatchedElementList()p|");
        
return FALSE;
    }
    
return TRUE;
}

       主要是用了IXMLDOMNodePtr的selectNodesҎ?br />       以上是几个方法,在这里只是简单的描述一下。具体XmlDom中的ҎQMSDN里面描述的非常清晎ͼq里不再多说?/p>

       具体代码会在稍后的时候给出?/p>

littlegai 2006-08-16 22:46 发表评论
]]>
com方式调用matlab(?http://m.shnenglu.com/qzb2006e/archive/2006/08/11/11138.htmllittlegailittlegaiFri, 11 Aug 2006 11:50:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/11/11138.htmlhttp://m.shnenglu.com/qzb2006e/comments/11138.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/11/11138.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11138.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11138.html阅读全文

littlegai 2006-08-11 19:50 发表评论
]]>
com方式调用matlab(? http://m.shnenglu.com/qzb2006e/archive/2006/08/10/11108.htmllittlegailittlegaiThu, 10 Aug 2006 12:59:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/10/11108.htmlhttp://m.shnenglu.com/qzb2006e/comments/11108.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/10/11108.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11108.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11108.html        com方式调用matlab(一)
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(?
        com方式调用matlab(?q行l果及代?
        虽然说已l有很多的文章介l如何在matlab下面m文g装为comlg,但是q里Z保障完整?q里q是把过E详l描qC?
       

1?span style="FONT: 7pt 'Times New Roman'">  ~写m文g?/span>

打开Matlab6Q依ơ选择File->New->M-FileQ创Z?/span>M文gQƈ键入如下信息Q?/span>

matlab3.JPG
试可运行后Q保存ƈ关闭。这里保存得文g名ؓdraw2D.m。回C界面?br />

2?span style="FONT: 7pt 'Times New Roman'">  生成lg

在主界面中键入如下命令ƈ回RQ?/span>

Comtool

matlab4.JPG

此时q入lg创徏界面?/span>

此时Q在菜单中依ơ选择File->New Project?/span>?br />matlab5.JPG

则进入组仉|界面。参照下图进行配|?/span>

其中Component name为组件名U。在q里命名?/span>c1?/span>

以前?/span>Classes处会自动填入?/span>c1”。这里我们选中c1?/span>Remove原名称U除Qƈ?/span>Class name中填入?/span>Draw2D”,?/span>Add>>?/span>

Project directory为组件的保存路径?/span>

Compile code in选项选择C++?/span>

Compiler options中按照如图进行钩选?/span>

?/span>OK。这样就创徏好了一个组件的配置?/span>

matla6.JPG

?/span>ok回到l徏创徏界面?/span>

然后选中Draw2DQ依ơ在菜单上选择Project->Add File?/font>引入刚才~写?/span>m文g?/span>

matlab7.JPG
matlab8.JPG

点“打开”,q样在lg中引入了m文g?/span>

然后回到lg创徏界面Q依ơ选择菜单中的Build->Com Object?/span>

matlab9.JPG
因ؓ可能要在没有安装matlab的电脑上面搭建环境,所以这里我们顺便打个包Qؓ搭徏环境q行准备。依ơ选择菜单上面?/span>Component->Package Component?br />

在步?/span>2的最后,我们看一下文件的输出l果?/span>

?/span>c1的工作目录中看到q样一些文件?/span>

matlab10.JPG

其中文g?/span>src里面是在~写c++E序中能够引入的头文件和接口定义文g、类定义文g{文件?/span>Distrib中是生成的组件组件文件。首先看一?/span>distrib 文g夏V?img height="113" alt="matlab11.JPG" src="http://m.shnenglu.com/images/cppblog_com/qzb2006e/matlab11.JPG" width="593" border="0" />

C1.exe为打包文Ӟ用于q行环境搭徏?/span>C1_1_0.dll是构建的lg库文件。其他文件我们不用关心?/span>

我们在再一?/span>src文g夏V里面包含很多文件?br />

matlab12.JPG

q里我们只关?/span>c1_idl_i.c?/span>c1_com.cpp文gQ因为其中包含了我们需要的lg的GUID、接口的RIID以及Ҏ的定义。至于配|文件的内容定义{方面的内容放C一部分说明?/span>



littlegai 2006-08-10 20:59 发表评论
]]>
com方式调用matlab(一)http://m.shnenglu.com/qzb2006e/archive/2006/08/09/11064.htmllittlegailittlegaiWed, 09 Aug 2006 14:32:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/09/11064.htmlhttp://m.shnenglu.com/qzb2006e/comments/11064.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/09/11064.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11064.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11064.html        目录
        com方式调用matlab(一)
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(? 
        com方式调用matlab(?
        com方式调用matlab(?
        com方式调用matlab(?q行l果及代?
        前一阵子同学叫我帮忙做毕业设?内容是从c++E序环境当中调用matlabq行l图.我之前从来没有接触过matlab,但是我对c++q是多少有点了解.q且同学也把上一届做好的论文拿来?里面有比较详l的介绍,特别是关键的代码部分,写得也比较清?所以我觉得q个d没什么困隄.估计按照论文上面按部q的做,大概一个晚上就能完?同学l了我一个周的时?应该是lԒ有余?于是我就有了q样的打?看看能不能通过其他的方法实现matlabl图功能的调?因ؓ毕竟是上一届的论文,{辩的时?I帮"׃好了.
        我从|上搜烦了一?发现了基于com的matlab~程的一pd文章,当然刊登q些文章的网站、论坛什么的都挺多,我也分不清出处了。不q最全的应该是在vc知识库网站上。我以前曄看过一些com的书c和文章Qƈ且对之也有少怺解。所以我决定了以此方式来完成这ơ毕业设计。ƈ且确实实CQ在设计q程当中感觉自己学到了不东西,又担心学的这些东西会随着旉渐渐淡忘Q所以在q里整理一下,希望能给需要进行相兌计的人提供一点帮助,也ؓ自己的知识留下一点痕qV?br />        我的思\是这LQ?br />        1、用matlab6的comtool工具把m文g转换成ؓcomlg?br />        2、在c++中在不引入tlb的前提下调用comlg?br />        W一步确实不是什么问题。因Z从Q何搜索引擎里面输?com matlab"都能获取大量的相关介l?br />        要做W二步的话就要先研究一下matlab生成的comlg的情况了。我打开comtool生成的那?c?h文g看了一下,发现其中接口是从IDispatchl承的。OKQ实现这一步也不是问题。这h的vcE序雏Ş有了:
         写一个程序配|文Ӟ其中包含所有要调用的matlablgQ以及它们的接口、方法的信息?br />         在vcE序中读取配|文Ӟ动态生成输入界面,在录入参数ƈ触发相关按钮事g后绘制图形?br />         然后Zq个思\Q我大体上绘制了cd。当然我对于visioq是个初学者,对于UML的相关知识也是一知半解,但是我觉得这个图应当能够基本上能够反映出我的意思?br />         matlabcom1.JPG
         主要调用程为:
         
     matlabcom2.JPG
          下面是从用matlab6~写m文g直到用vcE序调用matlablgl图的完整流E?br />          matlabcom3.JPG


        



littlegai 2006-08-09 22:32 发表评论
]]>
þþþAVվ| ޾Ʒþһ| þþþ޾Ʒվ| ƷþƷ| ھƷþþžŹƷ| Сڵþþþþ| þþþAVվ| þԭavapp| þҹ³˿Ƭϼ| ŷһþ| պAVëƬƷþþ| ޹˾Ʒþþùһ | ľƷþþþ޲| þĻ˿| һһþۺϺݺ| þþƷ2020| þþ뾫ƷպĦ| þù޾Ʒ| ˶ݺɫۺϾþ| ľþۺĻ| һþ㽶| ҹƷþþþþëƬ| Ʒþһ| þ99Ʒ99þ6| Ļþ| þþþ޾Ʒһ| þŮƵ| ĻþþƷ| þһ| 99þþƷһ| ޹պŷۺϾþ| avþþƷ| þ91Ʒ91þ鶹| ޾Ʒһþ| þùƷһƷ| 99þþžžƷ| þsmȤ| ۺϾþþ| ҹþþþþ| þþƷ| ޹պۺϾþþƷ|