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

SafeArray をロック状態に保つ CComSafeArray (RIIA) クラスを介して SAFEARRAY オブジェクトを保持しているため、Attach メソッドを呼び出す代わりにポインタを直接変更しているため、SafeArrayLock を明示的に呼び出す必要があります。ただし、CComSafeArray のデストラクタが Unlock を実行するため、デストラクタで unLock を呼び出す必要はありません。

SafeArrayLock への誤った呼び出しと SafeArrayUnLock の欠落について、将来さらに疑問が生じるのを避けるために、プレーンな SAFEARRAY* で最初に戻り値を取得することにより、CComSafeArray の Attach メソッドを使用することをお勧めします。

于 2012-11-02T10:13:17.190 に答える