接口聚合的实现原理。郁闷发问... 在看《COM技术内幕》,看到接口的聚合。看了三边,虽然懂了一些,不过还是没有到游刃有余的地步。希望高手指点,让我早登高楼,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可参考http://expert.csdn.net/Expert/topic/2305/2305025.xml?temp=.4171106 <COM原理及应用>讲得很清楚,就是通过委托对象来处理,因为支持聚合对于COM对象是有要求的,具体的内容还是自己看看潘老师的的那本书好了 COM聚合是一项复用技术,类似与继承。聚合对于COM实现方比较简单,只是在创建COM对象的同时也为你创建了另外一个COM对象,但是这两个COM对象必须满足COM的协议,在CLIENT方感觉就好象是一个对象一样。如下:class CObj1 : public IUnknown{ CObj1() { } virtual ~CObj1() { } ULONG AddRef() {...}; ULONG Release() {...}; HRESULT QueryInterface() {...}; HRESULT Method1() { return S_OK; }}class CObj2 : public IUnknown{ CObj1 *pObj; //this object is aggregated CObj2() { pObj1 = new CObj1; } CObj2() { delete pObj1; } ULONG AddRef() {...} ULONG Release() {...} HRESULT QueryInterface() {...}; HRESULT Method2() { return S_OK; }}CLIENT:void main(){ CObj2 *pInterface; HRESULT hr = ::CoCreateInstance(........,(VOID **)&pInterface); if(SUCCEEDED(hr)) { pInterface->Method2(); CObj1 *pInternface1; hr = pInterface->QueryInterface((void **)&pInternface1); //注意,这里同使用 //一个COM对象是一样的 if(SUCCEEDED(hr)) { pInterface1->Method1(); pInterface1->Release(); } pInterface->Release(); }} 当然在MFC和ATL中不是这样来实现的,但思想是一致的。 为什么运行的时候会有错误? 我建立一个文本框,怎么获取输入焦点在这个框上的时候输入的回车? 求助,zw和nt的区别 BHO 调试时不启动IE 怎么回事? 在程序中,怎样动态的把对话框的非客户区去掉??? 我想RegSetValueEx修改REG_SZ数据,怎么用? 新手问题,如何在vc++中使用其他语言自己开发的dll 请问,用什么函数可以得到一个caption不确定的窗口的窗口句柄 如何计时? 请教如何从带参数的命令行程序的输入里提取输入的参数 高手指教:如何实现在Activex控件的method中输出一块数据? 有关消息问题?
http://expert.csdn.net/Expert/topic/2305/2305025.xml?temp=.4171106
class CObj1 : public IUnknown
{
CObj1()
{
}
virtual ~CObj1()
{
}
ULONG AddRef()
{...};
ULONG Release()
{...};
HRESULT QueryInterface()
{...};
HRESULT Method1()
{
return S_OK;
}
}class CObj2 : public IUnknown
{
CObj1 *pObj; //this object is aggregated
CObj2()
{
pObj1 = new CObj1;
}
CObj2()
{
delete pObj1;
}
ULONG AddRef()
{...}
ULONG Release()
{...}
HRESULT QueryInterface()
{...};
HRESULT Method2()
{
return S_OK;
}
}CLIENT:void main()
{
CObj2 *pInterface;
HRESULT hr = ::CoCreateInstance(........,(VOID **)&pInterface);
if(SUCCEEDED(hr))
{
pInterface->Method2();
CObj1 *pInternface1;
hr = pInterface->QueryInterface((void **)&pInternface1); //注意,这里同使用 //一个COM对象是一样的
if(SUCCEEDED(hr))
{
pInterface1->Method1();
pInterface1->Release();
}
pInterface->Release();
}
}
当然在MFC和ATL中不是这样来实现的,但思想是一致的。