描述:
我现在的情况是从COM 组件传数组到ASP端是可以的,在COM组件中构造数组,数组作为输出参数,在ASP中得到返回值,直接按数组取值就可以了。
但是如果在ASP页面中声明一个数组,要想把这个数组作为输入参数传给COM,在COM中应该如何取出数组的值呢?
解决方案1:
同意用安全数组
解决方案2:构造一个safearray,用variant传进去.
解决方案3: [id(1), helpstring("method ExpectArray")] HRESULT ExpectArray([in] VARIANT varArray,[out,retval]BSTR* outstr);
STDMETHODIMP CArrayTest::ExpectArray(VARIANT pvarArray,BSTR* outstr)
{
// accepte array from vbscript
_bstr_t bstmp;
VARIANT* varArray;
if(pvarArray.vt==(VT_VARIANT|VT_BYREF))
{
varArray = pvarArray.pvarVal;
}
else
varArray = &pvarArray;
if(VT_ARRAY|VT_BYREF|VT_VARIANT==varArray->vt)
{
VARIANT* strarray;
SAFEARRAY* psa = *(varArray->pparray);
//SafeArrayCopy( *(varArray->pparray),&psa);
SafeArrayAccessData(psa,(void**)&strarray);
UINT uDim = SafeArrayGetDim(psa);
if(uDim==1)
{
long lLbound,lRbound;
SafeArrayGetLBound(psa,1,&lLbound);
SafeArrayGetUBound(psa,1,&lRbound);
for(long i=lLbound;i<=lRbound;i++)
{
if(strarray[i].vt==VT_BSTR)
bstmp +=strarray[i].bstrVal;
else if(strarray[i].vt==VT_EMPTY)
{
char buf[64];
wsprintf(buf,"element%d is empty",i);
bstmp +=buf;
}
}
}
else
bstmp = "wrong dimension number";
SafeArrayUnaccessData(psa);
}
*outstr = bstmp.copy();
return S_OK;
}
set obj = createobject("AcceptArray.ArrayTest")
dim s(3)
s(1) = "aaa"
s(2) = "bbb"
s(3) = "ccc"
obj.expectarray(s)
set obj = nothing