// 基于虚函数的接口实现,这里并不是真正的COM组件技术 // 真正的COM下,客户端不需要了解组件的实现,只是通过接口来使用组件提供的功能 #include <objbase.h> #include <iostream.h> void trace(const char *pMsg) { cout << pMsg << endl; } // 两个抽象接口 interface IX { virtual void _stdcall Fx1() = 0; // _stdcall Pascal方式清理C方式压栈,也称标准方式调用 virtual void _stdcall Fx2() = 0; // 常规c++调用中,栈的清理是由调用者完成 // 这里是函数自己清理 }; interface IY { virtual void _stdcall Fy1() = 0; virtual void _stdcall Fy2() = 0; }; // 接口实现 class CA : public IX, public IY { public: // 接口1实现:组件1 virtual void _stdcall Fx1() { cout << "CA::Fx1" << endl; } virtual void _stdcall Fx2() { cout << "CA::Fx2" << endl; } // // 接口2实现:组件2 virtual void _stdcall Fy1() { cout << "CA::Fy1" << endl; } virtual void _stdcall Fy2() { cout << "CA::Fy2" << endl; } }; // 客户端代码 int main() { trace("client: Create an instance of the component."); CA* pA = new CA; // 获得一个IX接口 IX* pIX = pA; trace("client: use the IX interface"); pIX->Fx1(); pIX->Fx2(); // 获取IY接口 IY* pIY = pA; trace("client: use the IY interface"); pIY->Fy1(); pIY->Fy2(); trace("client: delete the component"); delete pA; return 0; }