COM接口使用简单实现
2017-10-11 16:04
99 查看
模仿com接口
#include <iostream> using namespace std; // 定义接口关键字 #define interface struct // 查询接口 #define QUERYINTERFACE(Interface, iid) \ if(iid == IID_##Interface) \ return static_cast<Interface *>(this); // 查询不存在的接口 #define QUERYINTERFACE_IUNKNOWN(BaseInterface, iid)\ if(iid == IID_IUnknown) \ return static_cast<IUnknown *>(static_cast<BaseInterface*>(this)); // 向上转型到IUnknown // 每个接口的uuid,为了方便,这里直接手写 #define IID_IUnknown 0 interface IUnknown { virtual void* queryInterface(int iid) = NULL; }; #define IID_IItem 1 interface IItem : public IUnknown { virtual void showMsg() = NULL; }; #define IID_IViewItem 2 interface IViewItem : public IItem { virtual void printMsg() = NULL; }; #define IID_IData 3 interface IData : public IItem { virtual int add(int a, int b) = NULL; }; class PlazaView : public IViewItem, public IData { public: void showMsg() { cout << "showMsg" << endl; } void printMsg() { cout << "printMsg" << endl; } int add(int a, int b) { return a + b; } void* queryInterface(int iid) { QUERYINTERFACE(IViewItem, iid); QUERYINTERFACE(IData, iid); QUERYINTERFACE_IUNKNOWN(IViewItem, iid); return NULL; } }; int main() { PlazaView p; IUnknown* iUnknown = (IUnknown*)p.queryInterface(IID_IUnknown); IData* iData = (IData*)iUnknown->queryInterface(IID_IData); cout << iData->add(1, 2) << endl; system("pause"); return 0; }
关键点
IUnknown* iUnknown = (IUnknown*)p.queryInterface(IID_IUnknown); IData* iData = (IData*)iUnknown->queryInterface(IID_IData);
暂时不知道怎么描述,先占个坑。
相关文章推荐
- 使用System.DirectoryServices.Protocols实现对AD的简单操作
- DataTable用中使用Compute 实现简单的DataTable数据的统计.....
- 使用对Ant编程来实现简单文件的打包
- 使用对Ant编程来实现简单文件的打包
- 使用MIDP1.0实现TiledLayer的效果,并实现简单的滚屏
- [导入]使用对Ant编程来实现简单文件的打包
- 使用Java实现对dbf文件的简单读写
- 一个使用监听器模式实现的J2ME网络编程框架,包括一个简单的登录功能实现(含源代码)
- Asp.Net使用POST方法最简单的实现
- Spring--简单使用quartz实现定时作业
- 使用低级界面实现简单的数字输入
- 使用Ado.Net进行简单事务处理的四种实现及比较
- 使用正向最大匹配算法实现中文分词简单模型-用trie树实现
- 使用J2ME技术实现简单的动画(附代码实现)
- .NET中使用datagrid实现的简单分页效果
- 使用System.DirectoryServices.Protocols实现对AD的简单操作
- DataTable用中使用Compute 实现简单的DataTable数据的统计.....
- Spring--简单使用quartz实现定时作业
- 简单实现Tomcat使用SSL的连接。
- .NET中使用datagrid实现的简单分页效果