132 lines
2.1 KiB
Plaintext
132 lines
2.1 KiB
Plaintext
|
HRESULT
|
||
|
BuildVariantArrayofStrings(
|
||
|
LPWSTR *lppPathNames,
|
||
|
DWORD dwPathNames,
|
||
|
VARIANT ** ppVar
|
||
|
)
|
||
|
{
|
||
|
|
||
|
VARIANT v;
|
||
|
VARIANT * pVar = NULL;
|
||
|
SAFEARRAYBOUND sabNewArray;
|
||
|
DWORD i;
|
||
|
SAFEARRAY *psa = NULL;
|
||
|
HRESULT hr;
|
||
|
|
||
|
|
||
|
*ppVar = NULL;
|
||
|
sabNewArray.cElements = dwPathNames;
|
||
|
sabNewArray.lLbound = 0;
|
||
|
psa = SafeArrayCreate(VT_VARIANT, 1, &sabNewArray);
|
||
|
|
||
|
if (!psa) {
|
||
|
goto Fail;
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < dwPathNames; i++) {
|
||
|
|
||
|
VariantInit(&v);
|
||
|
V_VT(&v) = VT_BSTR;
|
||
|
V_BSTR(&v) = *(lppPathNames + i);
|
||
|
hr = SafeArrayPutElement(psa,
|
||
|
(long FAR *)&i,
|
||
|
&v
|
||
|
);
|
||
|
}
|
||
|
|
||
|
|
||
|
pVar = (VARIANT *)AllocSplMem(sizeof(VARIANT));
|
||
|
|
||
|
if (!pVar) {
|
||
|
goto Fail;
|
||
|
}
|
||
|
|
||
|
V_VT(pVar) = VT_VARIANT | VT_ARRAY;
|
||
|
|
||
|
V_ARRAY(pVar) = psa;
|
||
|
|
||
|
return(ResultFromScode(S_OK));
|
||
|
|
||
|
|
||
|
Fail:
|
||
|
|
||
|
if (pVar) {
|
||
|
FreeSplMem(pVar);
|
||
|
}
|
||
|
|
||
|
|
||
|
if (psa) {
|
||
|
SafeArrayDestroy(psa);
|
||
|
}
|
||
|
|
||
|
*ppVar = pVar;
|
||
|
|
||
|
return(E_FAIL);
|
||
|
|
||
|
}
|
||
|
|
||
|
HRESULT
|
||
|
BuildVariantArrayofIntegers(
|
||
|
LPDWORD lpdwObjectTypes,
|
||
|
DWORD dwObjectTypes,
|
||
|
VARIANT ** ppVar
|
||
|
)
|
||
|
{
|
||
|
|
||
|
VARIANT v;
|
||
|
VARIANT * pVar = NULL;
|
||
|
SAFEARRAYBOUND sabNewArray;
|
||
|
DWORD i;
|
||
|
SAFEARRAY *psa = NULL;
|
||
|
HRESULT hr;
|
||
|
|
||
|
|
||
|
*ppVar = NULL;
|
||
|
sabNewArray.cElements = dwObjectTypes;
|
||
|
sabNewArray.lLbound = 0;
|
||
|
psa = SafeArrayCreate(VT_VARIANT, 1, &sabNewArray);
|
||
|
|
||
|
if (!psa) {
|
||
|
goto Fail;
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < dwObjectTypes; i++) {
|
||
|
|
||
|
VariantInit(&v);
|
||
|
V_VT(&v) = VT_I4;
|
||
|
V_I4(&v) = *(lpdwObjectTypes + i);
|
||
|
hr = SafeArrayPutElement(psa,
|
||
|
(long FAR *)&i,
|
||
|
&v
|
||
|
);
|
||
|
}
|
||
|
|
||
|
|
||
|
pVar = (VARIANT *)AllocSplMem(sizeof(VARIANT));
|
||
|
|
||
|
if (!pVar) {
|
||
|
goto Fail;
|
||
|
}
|
||
|
|
||
|
V_VT(pVar) = VT_VARIANT | VT_ARRAY;
|
||
|
|
||
|
V_ARRAY(pVar) = psa;
|
||
|
|
||
|
*ppVar = pVar;
|
||
|
return(ResultFromScode(S_OK));
|
||
|
|
||
|
|
||
|
Fail:
|
||
|
|
||
|
if (pVar) {
|
||
|
FreeSplMem(pVar);
|
||
|
}
|
||
|
|
||
|
|
||
|
if (psa) {
|
||
|
SafeArrayDestroy(psa);
|
||
|
}
|
||
|
|
||
|
return(E_FAIL);
|
||
|
}
|