0

我是团队的新成员,我阅读了下面的代码。我想知道我需要在 dctor 中调用 SafeArrayUnLock 吗?我试图在没有明确线索的情况下在网上搜索。非常感谢您的帮助!

代码:

class Trasaction
{
private:
    CComSafeArray m_saCache;
public:
    //ctor
    Transaction(CComQIPtr<Reader>& pReader)
    {
        //This call need a SAFEARRAY** as its 3rd parameter
        pReader->ReadData(start, size, &m_saCache);
        SafeArrayLock(m_saCache.m_psa);
    }

};
4

1 回答 1

1

当您通过 CComSafeArray(一个 RIIA)类持有 SAFEARRAY 对象时,该类将 SafeArray 保持在锁定状态 - 并且当您直接修改指针而不是调用 Attach 方法时,您必须显式调用 SafeArrayLock。但是您不必在析构函数中调用 unLock,因为 CComSafeArray 的析构函数会执行 Unlock。

为了避免将来对 SafeArrayLock 的虚假调用和缺少的 SafeArrayUnLock 产生进一步的疑问 - 我建议使用 CComSafeArray 的 Attach 方法,首先在普通的 SAFEARRAY* 中获取返回值。

于 2012-11-02T10:13:17.190 回答