Ia.h
//#include <objbase.h>
//#include <unknwn.h>
interface IA:public IUnknown
{
virtual int _stdcall Add(int a,int b)=0;
};
// {B7691C47-7C3A-419c-894D-9B428A92A0D8}
const IID IID_IA =
{ 0xb7691c47, 0x7c3a, 0x419c, { 0x89, 0x4d, 0x9b, 0x42, 0x8a, 0x92, 0xa0, 0xd8 } };
Ib.h
//#include <objbase.h>
//#include <unknwn.h>
interface IB:public IUnknown
{
virtual HRESULT _stdcall Pass(int a,int b,int* c)=0;
};
// {3C2BC1A6-6F46-4b09-8FAB-8A18C6F4FACA}
const IID IID_IB =
{ 0x3c2bc1a6, 0x6f46, 0x4b09, { 0x8f, 0xab, 0x8a, 0x18, 0xc6, 0xf4, 0xfa, 0xca } };
Co.cpp
#include "ia.h"
#include "ib.h"
#include <atlbase.h>
class CO:public IUnknown
{
public:
CO();
HRESULT _stdcall QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject);
ULONG _stdcall AddRef();
ULONG _stdcall Release();
class CA:public IA
{
public:
CO* m_parent;
HRESULT _stdcall QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject);
ULONG _stdcall AddRef();
ULONG _stdcall Release();
int _stdcall Add(int a,int b);
} ca;
class CB:public IB
{
public:
CO* m_parent;
HRESULT _stdcall QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject);
ULONG _stdcall AddRef();
ULONG _stdcall Release();
HRESULT _stdcall Pass(int a,int b,int* c);
} cb;
private:
long m_ref;
};
CO::CO()
{
m_ref=0;
ca.m_parent=this;
cb.m_parent=this;
}
HRESULT _stdcall CO::QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject)
{
if(riid==IID_IA)
{
*ppvObject=(IA*)(&ca);
}
else if(riid==IID_IB)
{
*ppvObject=(IB*)(&cb);
}
else if(riid==IID_IUnknown)
{
*ppvObject=(IUnknown*)(this);
}
else
{
*ppvObject=NULL;
return E_NOINTERFACE;
}
reinterpret_cast<IUnknown*>(*ppvObject)->AddRef();
return S_OK;
}
ULONG _stdcall CO::AddRef()
{
++m_ref;
return m_ref;
}
ULONG _stdcall CO::Release()
{
--m_ref;
if(m_ref==0)
{
delete this;
return 0;
}
return m_ref;
}
HRESULT _stdcall CO::CA::QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject)
{
return m_parent->QueryInterface(riid,ppvObject);
}
ULONG _stdcall CO::CA::AddRef()
{
return m_parent->AddRef();
}
ULONG _stdcall CO::CA::Release()
{
return m_parent->Release();
}
int _stdcall CO::CA::Add(int a,int b)
{
int x=a+b;
return x;
}
HRESULT _stdcall CO::CB::QueryInterface(REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject)
{
return m_parent->QueryInterface(riid,ppvObject);
}
ULONG _stdcall CO::CB::AddRef()
{
return m_parent->AddRef();
}
ULONG _stdcall CO::CB::Release()
{
return m_parent->Release();
}
HRESULT _stdcall CO::CB::Pass(int a,int b,int* c)
{
int x=a-b;
c=&x;
return S_OK;
}
IUnknown* CreateInterface()
{
IUnknown* pc=static_cast<IUnknown*>(new CO);
return pc;
}
分享到:
相关推荐
详细分析了C++中嵌套类的实现与使用方法
本代码实现Android界面的双层tab嵌套功能。下载可直接运行。
1. 嵌套类外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类之外的...
通过查询数据库,在.net中实现大类商品下嵌套小类商品
QT实现的可移动放大缩小的大小嵌套窗体,里面是完整的测试项目,真正实现的是PatchWindow类
商城类APP的商品分类页面实现,使用RecyclerView结合GridLayout减少嵌套
本文实例讲述了Thinkphp中数据按分类嵌套循环实现方法。分享给大家供大家参考。具体实现方法如下: 做thinkphp时要用到循环里面嵌套循环的,并第二个循环是和外面的有关联的。 thinkphp官网给出的文档为: 复制代码 ...
http://blog.csdn.net/u011001084/article/details/54090425 资源类
Android通过Parcelable和Serializable实现各种类型嵌套序列化
主要介绍了详解Java 中的嵌套类与内部类的相关资料,希望通过本文大家能掌握Java 嵌套类与内部类的使用方法,需要的朋友可以参考下
支持嵌套ViewPager嵌套RecyclerView,理论上也支持直接嵌套RecyclerView,不过感觉没什么意义,就不再提供demo 一个NestedRecyclerView类处理所有滚动逻辑,不需要对ViewPager内的RecyclerView做特殊处理 支持第三...
主要介绍了java 嵌套类的详解及实例代码的相关资料,需要的朋友可以参考下
双listview嵌套demo 主要是实现 分类显示列表
必须在类内实现所有的成员函数,不能拿到类外。因为函数是不可以嵌套定义的;若类内含有静态数据成员,必须在该函数外初始化;类内不可含有静态函数成员;类中不可使用包裹它的函数所定义的除静态外的局部变量。 ...
工具类---实现实体类与Json的转换
今天小编就为大家分享一篇对python 树状嵌套结构的实现思路详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
放在另一个类的内部,这就是内部类(有的地方叫嵌套类), 包含内部类的类也被称为外部类(有的地方也叫宿主类) 匿名内部类就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 ...
使用VC8,Win32 API,非ATL或MFC,实现进程内COM组件。压缩包内有三个工程,包括,使用嵌套类实现IUnknown接口的COM、使用多继承实现IUnknown接口的COM,实现IDispatch接口的Automation。