使用巧妙的接口指针调用COM对象

ZDNet软件频道 时间:2000-07-03 作者:Dale Rogerson |  我要评论()
本文关键词:
介绍利用接口指针调用COM对象的方法

创建一个巧妙的接口指针类的原因

我想要一个巧妙的接口指针类的原因是要自动地添加和释放接口指针。

使用组件对象模型(COM)接口指针时,你必须要遵循几条规则。首先,绝不要在一个接口指针上调用删除(delete)来代替Release。下面的代码是不正确的:

IDraw* pIDraw ;
CoCreateInstance(...,IID,_IDraw, (void**)&pIDraw) ;
pIDraw->Draw(0,0,100,100) ;
delete pIDraw ; // Don't delete an interface pointer.

下面的代码是正确的:


IDraw* pIDraw ;
CoCreateInstance(...,IID,_IDraw, (void**)&pIDraw) ;
pIDraw->Draw(0,0,100,100) ;
pIDraw->Release() ;

C++程序设计员通常delete一个对象指针。因为这个原因,C++程序员容易忘记并且在一个接口指针上用delete代替Release。它也是C++程序员很难发现的一个错误,因为删除指针太自然了。

第二条规则是在创建新的指针时调用AddRef 。下面的代码是不正确的:

IDraw* pIDraw ;
CoCreateInstance(...,IID,_IDraw, (void**)&pIDraw) ;
pIDraw->Draw(0,0,100,100) ;
delete pIDraw ; // Don't delete an interface pointer.

下面的代码是正确的:

IDraw* pIDraw ;
CoCreateInstance(...,IID,_IDraw, (void**)&pIDraw) ;
pIDraw->Draw(0,0,100,100) ;
pIDraw->Release() ;

上面的例子很小,但是,在复杂的代码中,这个错误是很难跟踪到的。

使用巧妙的接口指针类并不只有唯一一个原因。DonBox在C++报道中提到了其他的一些原因(请参阅本篇文章末尾的书目)。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134