次の方法で共有


SafeArrayLock 関数 (oleauto.h)

配列のロック数をインクリメントし、配列記述子の pvData 内の配列データへのポインターを配置します。

構文

HRESULT SafeArrayLock(
  [in] SAFEARRAY *psa
);

パラメーター

[in] psa

SafeArrayCreate によって作成された配列記述子。

戻り値

この関数は、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK
正常終了しました。
E_INVALIDARG
引数 psa が無効です。
E_UNEXPECTED
配列をロックできませんでした。

注釈

配列記述子のポインターは、 SafeArrayUnlock 関数が呼び出されるまで有効です。 SafeArrayLock の呼び出しは入れ子にすることができます。この場合、SafeArrayUnlock への呼び出しの数が等しい必要があります。

配列はロックされている間は削除できません。

スレッド セーフ

SAFEARRAY データ型のすべてのパブリック静的 (Visual Basic では共有) メンバーはスレッド セーフです。 インスタンス メンバーがスレッド セーフであるとは限りません。

たとえば、SafeArrayLock 関数と SafeArrayUnlock 関数を使用するアプリケーションを考えてみましょう。 これらの関数が同じ SAFEARRAY データ型 インスタンス上の異なるスレッドから同時に呼び出されると、一貫性のないロックカウントが作成される可能性があります。 これにより、 SafeArrayUnlock 関数は最終的にE_UNEXPECTEDを返します。 これを防ぐには、独自の同期コードを指定します。

要件

要件
対象プラットフォーム Windows
ヘッダー oleauto.h
Library OleAut32.lib
[DLL] OleAut32.dll