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 |