Re: BSTR Array
Hi SaranG,
BSTR is a Pointer, ur *p = 'a' is not longer guilty as ur
FunctionBlock's.
U have should use CComVariant so u can host confirm
Varaints , or use easy CStringList.
CComVariant covar;
VariantClear(&covar);
SAFEARRAYBOUND size;
size.cElements = fieldCount;
size.lLbound = 0;
SAFEARRAY *parray = 0;
if(! (parray = SafeArrayCreate(VT_VARIANT, 1, &size)) )
return false;
for(register int i=0; i < fieldCount; i++)
{
CString test; test.Format("Rand=%d",rand()%100);
covar = test;
long index = i+size.lLbound;
SafeArrayPutElement(parray, &index, &covar);
}
covar.parray = parray;
covar.vt = VT_ARRAY | VT_VARIANT;
bool CSPCdata::VariantFromArray(long fromElm,CComVariant *covar, CComVariant
covarList)
{
if(covarList.vt != (VT_ARRAY | VT_VARIANT) || !covarList.parray || !covar)
return false;
register SAFEARRAY * psaSelectionList = covarList.parray;
register long Vstart = psaSelectionList->rgsabound->lLbound;
register long Vcnt = psaSelectionList->rgsabound->cElements;
if(fromElm > Vcnt)
return false;
fromElm += Vstart;
HRESULT hRes = SafeArrayGetElement(psaSelectionList, &fromElm, covar);
return (hRes == S_OK);
}
void CSPCdata::PrintVarList(CComVariant covarList)
{
HRESULT hRes;
CComVariant covarDescriptor;
if(covarList.vt != (VT_ARRAY | VT_VARIANT) || covarList.parray == NULL)
return;
register SAFEARRAY * psaSelectionList = covarList.parray;
register long Vstart = psaSelectionList->rgsabound->lLbound;
register long Vcnt = psaSelectionList->rgsabound->cElements;
for(register long i=Vstart; i < Vstart+Vcnt; i++)
{
hRes = SafeArrayGetElement(psaSelectionList, &i, &covarDescriptor);
if(FAILED(hRes))
break;
if(covarDescriptor.vt != VT_BSTR)
covarDescriptor.ChangeType(VT_BSTR);
CString str(covarDescriptor.bstrVal);
TRACE(_T("%s\r\n"),str.GetBuffer(0));
}
return;
}
"SaranG(Saravanan)" <infosarang@gmail.com> schrieb im Newsbeitrag
news:7226854c-3708-4b6c-a368-a476a53bed59@p39g2000prm.googlegroups.com...
Hi all, I am using ATL Web Services now. And want to return array of
strings, i heard that BSTR array will do this. But i don't know how to
return the BSTR Array. i try with basics, if i returns in the client
it have only one value .( that is 0th index value of BSTR array). The
snap code is below,
[soap_method]
HRESULT ArrayCheck(BSTR *bstrOutput)
{
/*BSTR bstrOP[3];
bstrOP[0] = L"One";
bstrOP[1] = L"TWO";
bstrOP[2] = L"Three";
bstrOutput = bstrOP;*/
bstrOutput[0] = L"Start";
bstrOutput[1] = L"Stop";
bstrOutput[2] = L"Close";
return S_OK;
}
but the return bstrOutput has only "Start" value.
Can any one helps me .
Thanks in advance,
Saran.