c++ - 我需要在此代码中调用 SafeArrayUnLock 吗?

标签 c++ safearray

<分区>

我是团队的新成员,我阅读了下面的代码。我想知道我是否需要在 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);
    }

};

最佳答案

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

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

关于c++ - 我需要在此代码中调用 SafeArrayUnLock 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13192879/

相关文章:

c++ - 类似于 c++ 的 setTimeout 功能

c++ - 这个 CComSafeArray 用法不好吗?

c++ - 您如何从 CComSafeArray 获取底层 SAFEARRAY?

c++ - c 和 c++ 中 long long int 的不同结果?

c++ - std::vector 的容量是如何确定的

c++ - COM 对象的 SAFEARRAY

c# - GUID 的 COM SAFEARRAY 从 C++ 返回到 C#

c++ - 从 SAFEARRAY 中获取一个元素(或将其转换为长数组)

C++ Boost io 流,错误处理

c++ - 用STL算法生成一个动态大小的动态容器