IUnknown
来源:互联网 发布:淘宝如何修改收货地址 编辑:程序博客网 时间:2024/05/20 01:34
#include <iostream>#include <objbase.h>using namespace std;extern const IID IID_A;extern const IID IID_B;extern const IID IID_C;// {32bb8320-b41b-11cf-a6bb-0080c7b2d682}static const IID IID_A = {0x32bb8320, 0xb41b, 0x11cf,{0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}} ;// {32bb8321-b41b-11cf-a6bb-0080c7b2d682}static const IID IID_B = {0x32bb8321, 0xb41b, 0x11cf,{0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}} ;// {32bb8322-b41b-11cf-a6bb-0080c7b2d682}static const IID IID_C = {0x32bb8322, 0xb41b, 0x11cf,{0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}} ;interface A:IUnknown{virtual void ATest(void)=NULL;};interface B:IUnknown{virtual void BTest(void)=NULL;};interface C:IUnknown{virtual void CTest(void)=NULL;};class CA:public A,B{public:virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv);virtual ULONG __stdcall AddRef();virtual ULONG __stdcall Release();public:virtual void ATest(void){cout<<"ATest"<<endl;}virtual void BTest(void){cout<<"BTest"<<endl;}public:CA(){m_cRef=0;}private:long m_cRef;};HRESULT __stdcall CA::QueryInterface(const IID& iid, void** ppv){if (iid==IID_IUnknown){*ppv=static_cast<A*>(this);}else if (iid== IID_A){*ppv=static_cast<A*>(this);}else if (iid== IID_B){*ppv=static_cast<B*>(this);}else{*ppv=NULL;return E_NOINTERFACE;}reinterpret_cast<IUnknown*>(*ppv)->AddRef();return S_OK;}ULONG __stdcall CA::AddRef(){return InterlockedIncrement(&m_cRef);}ULONG __stdcall CA::Release(){if (InterlockedDecrement(&m_cRef)==0){delete this;return 0;}return m_cRef;}IUnknown* CreateInstance(){IUnknown *pI=static_cast<A*>(new CA);pI->AddRef();return pI;}int main (void){HRESULT hr;IUnknown* pIUnknown=CreateInstance();A* pA=NULL;hr=pIUnknown->QueryInterface(IID_A,(void**)&pA);if (SUCCEEDED(hr)){pA->ATest();pA->Release();}B* pB=NULL;hr=pIUnknown->QueryInterface(IID_B,(void**)&pB);if (SUCCEEDED(hr)){pB->BTest();pB->Release();}C* pC=NULL;hr=pIUnknown->QueryInterface(IID_C,(void**)&pC);if (SUCCEEDED(hr)){pC->CTest();pC->Release();}else{cout<<"error"<<endl;}B* pIA=NULL;hr=pA->QueryInterface(IID_B,(void**)&pIA);if(SUCCEEDED(hr)){pIA->BTest();pIA->Release();}//IUnknown* pIUnknownFromIY = NULL ;//hr = pB->QueryInterface(IID_IUnknown, (void**)&pIUnknownFromIY) ;//if (SUCCEEDED(hr))//{//if (pIUnknownFromIY == pIUnknown)//{//cout << "Yes, pIUnknownFromIY == pIUnknown." << endl ;//}//else//{//cout << "No, pIUnknownFromIY != pIUnknown." << endl ;//}//}pIUnknown->Release();return 0;}ATest
BTest
error
BTest
请按任意键继续. . .
0 0
- IUnknown
- IUnknown
- IUnknown
- IUnknown
- IUnknown
- IUnknown接口
- IUnknown接口
- IUnknown接口
- IUnknown接口
- IUnknown接口
- IUnknown接口
- IUnknown接口
- IUnKnown接口
- IUnknown接口
- IUnKnown的相关知识
- COM:IUnknown、IClassFactory、IDispatch
- COM:IUnknown、IClassFactory、IDispatch
- COM:IUnknown、IClassFactory、IDispatch
- 关于enq: TX - allocate ITL entry的问题分析
- C++ STL算法系列1---count函数
- 【大渣】【多维KMP】奶牛阵列
- Java NIO——Selector机制源码分析---转
- 【Linux学习】epoll详解
- IUnknown
- UVa 12418 - Game of 999
- js常用返回刷新脚本
- spring源码剖析(一)下载spring3.2源代码,并编译源代码
- Android 中webp 的使用
- Qin Shi Huang's National Road System
- 安家了!第一篇自己的博客
- 关于英雄联盟中的英雄是如何寻找最佳路径的
- 局域网所有IP