新手请教接口聚合!!!!!!!!! 请大家一定要帮帮忙,我已经困惑好几天了!!正如Dale Rogerson说的:由于一些细节问题没有解决,你最后不得不放弃! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是为了防止m_pUnknownInner调Release时,内部组件有可能调外部组件(就是CA自已)的Release,造成重复调用析构函数。我想,内部组件的引用计数总为1,而由外部组件来控制内部组件的生存期。 你可以自己看一下对象的引用计数,过去普通对象的引用计数器就在对象指针前一个字节。不知道com是不是一样 我这样哪儿不对?!CA::~CA() {InterlockedDecrement(&g_cComponenets); trace("Destroy self."); if(m_pUnknownInner!=NULL) { m_pUnknownInner->Release(); } } Dale Rogerson为了简化,对一个COM class中的所有interface使用了一个引用计数但COM要求客户在使用时,不管是如何实现的,均当成每一个interface都有一个单独的引用计数只把m_pUnknownInner Release不合这一规则而在有些情形下,Release可能并不是如Dale那个例子中那么简单,里面可能还有一些资源的释放过程,这时,跳过接口IY的Release可能会造成难以预料的后果 对于集合对象引用计数由外部对象来管理,相对的是内部对象必须通过委托的形式将IUNKNOWN的对象交给外部来管理,这里可见ATL中对于集合的实现,有一个联合,其中容纳了引用计数和IUNKNOWN *,相信这种模型理解容易点吧! 请问:音频数据中静音的值大概是多少? VS2008 x64下编译32位程序遇到问题 windows"开始"菜单弹出时的句柄如何取得 MFC对话框问题 请教《深入浅出mfc》第三章的frame3的一个问题 那位高手用过MediaPlayer控件,有个很急的问提(不难)(在线等待) 填充显示问题 ListView_InsertItem为什么一直返回0?? 谁知道VC下如何调用VB中调用的activex dll 哪里有非常好用又简单使用的写帮助的工具?哪能下载,给小弟推荐推荐,谢谢了! 我已经发过一遍,怎么没人理啊,今天没有明白socket问题的人吗? 如何调用带参数的程序?
我想,内部组件的引用计数总为1,而由外部组件来控制内部组件的生存期。
不知道com是不是一样
CA::~CA()
{InterlockedDecrement(&g_cComponenets);
trace("Destroy self.");
if(m_pUnknownInner!=NULL)
{
m_pUnknownInner->Release();
}
}
但COM要求客户在使用时,不管是如何实现的,均当成每一个interface都有一个单独的引用计数
只把m_pUnknownInner Release不合这一规则
而在有些情形下,Release可能并不是如Dale那个例子中那么简单,里面可能还有一些资源的释放过程,这时,跳过接口IY的Release可能会造成难以预料的后果