次の方法で共有


SafeArrayAccessData 関数 (oleauto.h)

配列のロックカウントをインクリメントし、配列データへのポインターを取得します。

構文

HRESULT SafeArrayAccessData(
  [in]  SAFEARRAY  *psa,
  [out] void HUGEP **ppvData
);

パラメーター

[in] psa

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

[out] ppvData

配列データ。

戻り値

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

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

注釈

SafeArrayAccessData を呼び出した後、SafeArrayUnaccessData 関数を呼び出して配列のロックを解除する必要があります。

次の例では、配列要素に直接アクセスして、BSTR を含む 1 次元の安全な配列を並べ替えます。 この方法は、 SafeArrayGetElement と SafeArrayPutElement を使用するよりも高速 です

long i, j, min; 
BSTR bstrTemp;
BSTR HUGEP *pbstr;
HRESULT hr;

// Get a pointer to the elements of the array.
hr = SafeArrayAccessData(psa, (void HUGEP**)&pbstr);
if (FAILED(hr))
goto error;

// Selection sort.
for (i = 0; i < psa->rgsabound.cElements-1; i++)
{
   min = i;
   for (j = i+1; j < psa->rgsabound.cElements; j++)
   {
      if (wcscmp(pbstr[j], pbstr[min]) < 0)
         min = j; 
   }

   // Swap array[min] and array[i].
   bstrTemp = pbstr[min];
   pbstr[min] = pbstr[i];
   pbstr[i] = bstrTemp;

}

SafeArrayUnaccessData(psa);

要件

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