// 基於虛函數的介面實現,這裡並不是真正的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 />}