如何正确使用TComInterface?

如何正确使用TComInterface?,com,c++builder,Com,C++builder,我想使用TComInterface替换原始指针 我目前的代码是: { t接口pStore; if(成功(CoCreateInstance(CLSID_StoreNamespace,NULL,CLSCTX_INPROC_SERVER,IID_IStoreNamespace,(LPVOID*)&pStore))) { if(成功(pStore->Initialize(Form1->Handle,1))) { //pStore->CallOtherMethods。。。 } } //是否自动释放()?

我想使用TComInterface替换原始指针

我目前的代码是:

{
t接口pStore;
if(成功(CoCreateInstance(CLSID_StoreNamespace,NULL,CLSCTX_INPROC_SERVER,IID_IStoreNamespace,(LPVOID*)&pStore)))
{
if(成功(pStore->Initialize(Form1->Handle,1)))
{
//pStore->CallOtherMethods。。。
}
}
//是否自动释放()?
}
如果我理解正确,它会用新指针覆盖pStore指针,这样它就不会调用
pStore->Release()pStore
从上一个实例自动执行code>


在什么条件下调用
Release()
?我相信可能是当变量超出范围时,即使我这样初始化它。在上面的例子中,初始化pStore的正确方法是什么,这样它不仅可以覆盖指针,还可以首先调用
Release()

TComInterface
TComInterface
超出范围并被破坏时,调用其内部接口上的
Release()
。如果希望更快地手动
Release()
接口,也可以调用
TComInterface::Unbind()
方法<如果您通过
=
赋值运算符指定了新的接口指针(或其他
TComInterface
实例),则code>TComInterface
还会在其当前接口上调用
Release()


TComInterface
重写
&
运算符以返回指向其内部接口的指针,因此在调用
CoCreateInstance()
(或任何其他将新接口复制到
TComInterface
中的操作)之前,必须确保
TComInterface
未保留活动接口否则预览界面将被泄露而不发布
TComInterface
的默认构造函数将内部接口设置为NULL,因此通常不必担心,除非多次重复使用相同的
TComInterface
变量,例如,在循环中使用接口枚举器时。

我理解,但我想问的是如何执行类似于
TComInterface pStore=???这里是什么?
的操作来初始化pStore,而不是调用
CoCreateInstance
,以及自动释放/取消绑定以前的值。有没有办法做到这一点?如果您已经有一个预先存在的接口指针,那么使用
=
赋值操作符初始化
TComInterface
就可以了。如果在声明
TComInterface
时使用
=
运算符,它将调用以接口为输入的
TComInterface
构造函数,并将存储接口指针并在其上调用
AddRef()
(如果它不为NULL)。如果稍后在同一个
TComInterface
上调用
=
操作符,它将
释放现有接口(如果它不是空的),保存新的接口指针,并在其上调用
AddRef()
(如果它不是空的)。好的,所以我不能第一次用
=/code>操作符初始化它(或构造函数?)但我必须在第一次使用
CoCreateInstance
来获取接口指针,对吗?
TComInterface
更改了您管理接口指针的方式,它不会更改从何处获取接口指针(尽管它确实有
CreateInstance()
ActiveInstance()如果不想直接调用
CoCreateInstance/Ex()
GetActiveObject()
,则可以使用
RemoteInstance()
wrapper方法。接口指针可以来自任意数量的源,而不仅仅是
CoCreateInstance()