SafeArrayCreateEx 함수(oleauto.h)
지정된 VARTYPE, 차원 및 범위 수에서 안전한 배열 설명자를 만들고 반환합니다.
구문
SAFEARRAY * SafeArrayCreateEx(
[in] VARTYPE vt,
[in] UINT cDims,
[in] SAFEARRAYBOUND *rgsabound,
[in] PVOID pvExtra
);
매개 변수
[in] vt
배열의 각 요소에 대한 기본 형식 또는 VARTYPE입니다. 변형 형식 VT_RECORD 대해 FADF_RECORD 플래그를 설정할 수 있고, VT_DISPATCH 또는 VT_UNKNOWN FADF_HAVEIID 플래그를 설정할 수 있으며, 다른 모든 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의 프록시/스텁 코드 생성이 포함됩니다. 다른 유형의 인터페이스를 실제로 전달하려면 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 |