次の方法で共有


SafeArrayCreateEx 関数 (oleauto.h)

指定した VARTYPE、次元と境界の数から、安全な配列記述子を作成して返します。

構文

SAFEARRAY * SafeArrayCreateEx(
  [in] VARTYPE        vt,
  [in] UINT           cDims,
  [in] SAFEARRAYBOUND *rgsabound,
  [in] PVOID          pvExtra
);

パラメーター

[in] vt

配列の各要素の基本型または VARTYPE。 FADF_RECORD フラグは、バリアント型VT_RECORDに設定できます。FADF_HAVEIID フラグは、VT_DISPATCHまたはVT_UNKNOWNに設定でき、FADF_HAVEVARTYPEは他のすべての VARTYPEs に対して設定できます。

[in] cDims

配列の次元数。

[in] rgsabound

配列に割り当てる境界のベクトル (次元ごとに 1 つ)。

[in] pvExtra

ユーザー定義型の安全な配列を作成する場合は、ユーザー定義型の型情報。 vt パラメーターがVT_RECORD場合、 pvExtra はレコードを記述する IRecordInfo へのポインターになります。 vt パラメーターがVT_DISPATCHまたはVT_UNKNOWNの場合、pvExtra には、配列に渡されるインターフェイスの種類を表す GUID へのポインターが含まれます。

戻り値

安全な配列記述子。配列を作成できなかった場合は null。

注釈

VARTYPE がVT_RECORDの場合、 SafeArraySetRecordInfo が呼び出されます。 VARTYPE がVT_DISPATCHまたはVT_UNKNOWN場合、配列の要素には同じ型のインターフェイスが含まれている必要があります。 この配列を他のプロセスにマーシャリングするプロセスの一部には、 pvExtra パラメーターによって指される IID のプロキシ/スタブ コードの生成が含まれます。 異種インターフェイスを実際に渡すには、 pvExtra でIID_IUnknownまたはIID_IDispatchを指定し、呼び出し元が実際のインターフェイスに対してクエリを実行する方法を識別するための他の手段を提供する必要があります。

次の例では、ユーザー定義型の安全な配列を型VT_RECORDのバリアントに格納する方法について説明します。

SAFEARRAYBOUND * sab;
sab.cElements = 2;
sab.lLbound = 0;
hresult hr;

SAFEARRAY Sa;
Sa = SafeArrayCreateEx(VT_RECORD, 1, &sab, pRecInfo);
if (Sa == NULL)
   return E_OUTOFMEMORY;

PVOID pvData;
hr = SafeArrayAccessData(Sa, &pvData);
if (FAILED(hr)) {
   SafeArrayDestroy(Sa);
   return hr;
}

TEST * pTest;
pTest = (TEST *)pvData;
pTest[0] = a;
pTest[1] = b;
hr = SafeArrayUnaccessData(Sa);
if (FAILED(hr)) {
   SafeArrayDestroy(Sa);
   return hr;
}

VariantInit(&variant);
V_VT(&variant) = VT_ARRAY|VT_RECORD;
V_ARRAY(&variant) = Sa;

要件

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