COM_001: 基於虛函數的介面實現,偽COM

來源:互聯網
上載者:User

 // 基於虛函數的介面實現,這裡並不是真正的COM組件技術<br />// 真正的COM下,用戶端不需要瞭解組件的實現,只是通過介面來使用組件提供的功能</p><p>#include <objbase.h><br />#include <iostream.h></p><p>void trace(const char *pMsg)<br />{<br />cout << pMsg << endl;<br />}</p><p>// 兩個抽象介面</p><p>interface IX<br />{<br /> virtual void _stdcall Fx1() = 0; // _stdcall Pascal方式清理C方式壓棧,也稱標準方式調用<br />virtual void _stdcall Fx2() = 0; // 常規c++調用中,棧的清理是由調用者完成<br /> // 這裡是函數自己清理<br />};</p><p>interface IY<br />{<br />virtual void _stdcall Fy1() = 0;<br />virtual void _stdcall Fy2() = 0;<br />};</p><p>// 介面實現<br />class CA : public IX,<br /> public IY<br />{<br />public:<br />// 介面1實現:組件1<br />virtual void _stdcall Fx1()<br />{<br />cout << "CA::Fx1" << endl;<br />}</p><p>virtual void _stdcall Fx2()<br />{<br />cout << "CA::Fx2" << endl;<br />}</p><p>//////////////////////////////////</p><p>// 介面2實現:組件2<br />virtual void _stdcall Fy1()<br />{<br />cout << "CA::Fy1" << endl;<br />}</p><p>virtual void _stdcall Fy2()<br />{<br />cout << "CA::Fy2" << endl;<br />}<br />};</p><p>// 用戶端代碼<br />int main()<br />{<br />trace("client: Create an instance of the component.");<br />CA* pA = new CA;</p><p>// 獲得一個IX介面<br />IX* pIX = pA;</p><p>trace("client: use the IX interface");<br />pIX->Fx1();<br />pIX->Fx2();</p><p>// 擷取IY介面<br />IY* pIY = pA;</p><p>trace("client: use the IY interface");<br />pIY->Fy1();<br />pIY->Fy2();</p><p>trace("client: delete the component");<br />delete pA;</p><p>return 0;<br />}  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.