Posterboy
April 19th, 1999, 11:50 AM
I'm trying to pass and array back to a VB Client, but my code doesn't do exactly what I want it too. When the VB client gets the return value, it has an array of the right type and dimensions, but empty values! I'm returning back a VARIANT of type VT_ARRAY. I'm not using the SAFEARRAY data type because I want to use this component in an asp page later.
Here is my code:
STDMETHODIMP CClasses::GetClassList(VARIANT *pReturn)
{
CspClassNames strproc; //data consumer
HRESULT hr;
strproc.m_cpp = 0;
hr = strproc.Open();
if(FAILED(hr))
{
//m_spObjectContext->SetAbort();
return E_FAIL;
}
SAFEARRAY* pArray;
SAFEARRAYBOUND adim;
long size = 1;
adim.lLbound = 0;
adim.cElements = size;
pArray = SafeArrayCreate(VT_BSTR,1,&adim);
long index = 0;
CComBSTR node;
TCHAR tempstr[256] = "";
TCHAR buildstr[256] = "";
hr = strproc.MoveFirst();
while(hr == S_OK)
{
TCHAR tempstr[256] = "";
TCHAR buildstr[256] = "";
adim.cElements = size;
SafeArrayRedim(pArray,&adim);
_ltoa(strproc.m_CourseNumber,tempstr,10);
strcat(buildstr,tempstr);
node = strproc.m_CourseNumber;
strcat(buildstr,"~");
strcat(buildstr,strproc.m_SubjectLevel);
node = buildstr;
SafeArrayPutElement(pArray,&index,node.Copy());
index++; size++;
hr = strproc.MoveNext();
}
pReturn->vt = VT_ARRAY;
SafeArrayCopy(pArray,&pReturn->parray);
SafeArrayDestroy(pArray);
strproc.Close();
strproc.m_session.Close();
//m_spObjectContext->SetComplete();
return S_OK;
}
VB Client:
Dim a As Variant
a = sch.GetClassList 'or
sch.GetCLassLits a
Thanks in advance
Here is my code:
STDMETHODIMP CClasses::GetClassList(VARIANT *pReturn)
{
CspClassNames strproc; //data consumer
HRESULT hr;
strproc.m_cpp = 0;
hr = strproc.Open();
if(FAILED(hr))
{
//m_spObjectContext->SetAbort();
return E_FAIL;
}
SAFEARRAY* pArray;
SAFEARRAYBOUND adim;
long size = 1;
adim.lLbound = 0;
adim.cElements = size;
pArray = SafeArrayCreate(VT_BSTR,1,&adim);
long index = 0;
CComBSTR node;
TCHAR tempstr[256] = "";
TCHAR buildstr[256] = "";
hr = strproc.MoveFirst();
while(hr == S_OK)
{
TCHAR tempstr[256] = "";
TCHAR buildstr[256] = "";
adim.cElements = size;
SafeArrayRedim(pArray,&adim);
_ltoa(strproc.m_CourseNumber,tempstr,10);
strcat(buildstr,tempstr);
node = strproc.m_CourseNumber;
strcat(buildstr,"~");
strcat(buildstr,strproc.m_SubjectLevel);
node = buildstr;
SafeArrayPutElement(pArray,&index,node.Copy());
index++; size++;
hr = strproc.MoveNext();
}
pReturn->vt = VT_ARRAY;
SafeArrayCopy(pArray,&pReturn->parray);
SafeArrayDestroy(pArray);
strproc.Close();
strproc.m_session.Close();
//m_spObjectContext->SetComplete();
return S_OK;
}
VB Client:
Dim a As Variant
a = sch.GetClassList 'or
sch.GetCLassLits a
Thanks in advance