Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

131 lines
2.1 KiB

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);
}