如何正确使用TComInterface?

时间:2013-11-18 20:32:35

标签: com c++builder

我想用TComInterface替换原始指针。

我目前的代码是:

{
TComInterface<IStoreNamespace> pStore;
if (SUCCEEDED(CoCreateInstance(CLSID_StoreNamespace, NULL, CLSCTX_INPROC_SERVER, IID_IStoreNamespace, (LPVOID*)&pStore)))
    {
    if (SUCCEEDED(pStore->Initialize(Form1->Handle, 1)))
        {
        //pStore->CallOtherMethods...
        }
    }
// Release()'d automatically?
}

如果我理解正确,这会用新指针覆盖pStore指针,因此它不会使用pStore->Release();从最后一个实例自动调用pStore

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

1 个答案:

答案 0 :(得分:1)

TComInterface超出范围并被破坏时,

Release()会在其内部接口上调用TComInterface。如果您希望尽快手动TComInterface::Unbind()界面,也可以调用Release()方法。如果您通过TComInterface赋值运算符分配新的接口指针(或其他Release()实例),TComInterface也会在其当前接口上调用=

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