共用方式為


SafeArrayCreateEx 函式 (oleauto.h)

從指定的 VARTYPE、維度數目和界限建立並傳回安全陣列描述元。

語法

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

參數

[in] vt

陣列中每個元素的基底類型或 VARTYPE。 FADF_RECORD旗標可以設定為 variant 類型VT_RECORD、FADF_HAVEIID旗標可以針對VT_DISPATCH或VT_UNKNOWN設定,而且可以針對所有其他 VARTYPE 設定FADF_HAVEVARTYPE。

[in] cDims

陣列中維度的數目。

[in] rgsabound

界限的向量 (每個維度) 配置給陣列。

[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 的 Proxy/存根程式代碼。 若要實際傳遞異質介面,您必須在 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
程式庫 OleAut32.lib
Dll OleAut32.dll