如何在COM接口中传递数组类型的参数?
gun2 2000-08-30 04:58:00 我用VC6写了一个供ASP调用的控件,想传给ASP一个BSTR的数组,未果,求助!
我试过数组元素类型为BSTR和VARIANT的BSTR,都不行。
IDL的相关内容:
[id(1), helpstring("method Hello")] HRESULT Hello([in,out]VARIANTARG* parm,[out,retval]BOOL* retcode);
接口的代码情况如下:
STDMETHODIMP CHelloWorldAgent::Hello(VARIANTARG *parm, BOOL *retcode)
{
// TODO: Add your implementation code here
BSTR ba[3];
ba[0] = ::SysAllocString( L"This" );
ba[1] = ::SysAllocString( L" is a " );
ba[2] = ::SysAllocString( L"test!" );
VARIANT va[3];
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 3;
*retcode = FALSE;
parm->vt = VT_ARRAY;
parm->parray = ::SafeArrayCreate(VT_VARIANT, 1, rgsabound);
if( !parm->parray )
{
*retcode = FALSE;
return S_OK;
}
for(long i=0; i<3; i++)
{
::VariantInit( &va[i] );
va[i].vt = VT_BSTR;
va[i].bstrVal = ba[i];
HRESULT hr = ::SafeArrayPutElement( parm->parray, &i, &va[i] );
if( FAILED(hr) )
{
*retcode = FALSE;
return S_OK;
}
::SysFreeString( ba[i] );
::VariantClear( &va[i] );
}
*retcode = TRUE;
return S_OK;
}