javascript函数如下:
function c(i){
alert("c"+i['2']+i['j']);
}
其中i是一个数组,调用c函数的onclick如下:
<a id="yy" href="http://www.sina.com/" onclick="c({'2':'y','j':'k'})" target="_blank">新浪</a>在VC的webbrowse中获取了js的
IDispatch *pDispScript = NULL;
HRESULT hResult;
hResult = pDoc2->get_Script(&pDispScript);hResult = pDispScript->Invoke(dispid,IID_NULL, LOCALE_USER_DEFAULT,DISPATCH_METHOD,&dispparams,&vResult,&excepInfo,&nArgErr); 请问运行带数组参数的JS函数,dispparams的参数要怎么设置?小弟求求各位高手解决
function c(i){
alert("c"+i['2']+i['j']);
}
其中i是一个数组,调用c函数的onclick如下:
<a id="yy" href="http://www.sina.com/" onclick="c({'2':'y','j':'k'})" target="_blank">新浪</a>在VC的webbrowse中获取了js的
IDispatch *pDispScript = NULL;
HRESULT hResult;
hResult = pDoc2->get_Script(&pDispScript);hResult = pDispScript->Invoke(dispid,IID_NULL, LOCALE_USER_DEFAULT,DISPATCH_METHOD,&dispparams,&vResult,&excepInfo,&nArgErr); 请问运行带数组参数的JS函数,dispparams的参数要怎么设置?小弟求求各位高手解决
1. 将数组打包到VARIANT变量里[cpp] view plaincopy
HRESULT CXXX::pack(VARIANT *pVariant, long pArgs[], long lCount)
{
long i;
HRESULT hr;
VARIANT var;
SAFEARRAY* pArray;
hr = S_OK;
pArray = SafeArrayCreateVector(VT_VARIANT, 0, lCount);
if (pArray == NULL){
return -1;
}
VariantInit(&var);
var.vt = VT_I4;
//如果是字符串数据, 以下转变其数据类型
//::VariantChangeType(&var, &var, 0, VT_BSTR);
//转变后对相应的参数赋值, var.bstrVal
for(i = 0; i < lCount; i++)
{
var.lVal = pArgs[i];
hr = SafeArrayPutElement(pArray, &i, &var);
if (FAILED(hr))
{
SafeArrayDestroy( pArray );
return -1;
}
}
VariantInit(pVariant);
VariantClear(&var);
pVariant->vt = VT_ARRAY | VT_VARIANT;
pVariant->parray = pArray;
return 0;
} 2. 对为数组类型的VARIANT变量进行解包[cpp] view plaincopy
// 解包Variant
HRESULT CXXX::unpack(VARIANT *pVariant, long pArgs[], long lCount)
{
long i;
HRESULT hr;
VARTYPE vt;
VARIANT var;
SAFEARRAY* pArray;
i = 0;
hr = S_OK;
if (pVariant != NULL)
{
vt = pVariant->vt;
pArray = vt & VT_BYREF?*pVariant-> pparray: pVariant-> parray;
switch (vt & (VT_I4 | VT_VARIANT))
{
case VT_VARIANT:
{
VariantInit(&var);
for (i = 0; i < lCount; i++)
{
hr = ::SafeArrayGetElement(pArray, &i, &var);
if (FAILED(hr)){
VariantClear(&var);
return -1;
}
hr = ::VariantChangeType(&var, &var, 0, VT_I4);
if (FAILED(hr)){
VariantClear(&var);
return -1;
}
pArgs[i] = var.lVal;
}
VariantClear(&var);
break;
}
case VT_I4:
{
for (i = 0; i < lCount; i++)
{
hr = ::SafeArrayGetElement(pArray, &i, &pArgs[i]);
if (FAILED(hr)){
return -1;
}
break;
}
}
}
}
return hr;
}
STDMETHODIMP CTestCom1::vb2vc(VARIANT buffer)
{
long dim=SafeArrayGetDim(buffer.parray);
long ubound;
long lbound;SafeArrayGetUBound(buffer.parray,dim,&ubound);
SafeArrayGetLBound(buffer.parray,dim,&lbound);
BSTR* buf;
BSTR pd[2];
SafeArrayAccessData(buffer.parray,(void**)&buf);
for (int i=lbound;i<ubound;i++)
pd[i]=buf[i];
}
return S_OK;
}buffer为一维数组,存放字符串,在vb中的代码为
Dim oo As ARRAYTESTLib.TestCom1Set oo = New ARRAYTESTLib.TestCom1Dim buf(2) As Stringbuf(0) = "65"
buf(1) = "anss"
oo.vb2vc buf2。COM返回数组数据到vbSTDMETHODIMP CTestCom1::retarray(VARIANT *buffer)
{
//返回数组
SAFEARRAY FAR* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound=0;
rgsabound[0].cElements=2;
psa=SafeArrayCreate(VT_I4,1,rgsabound);long idx;
long setdt;idx=0;
setdt=12;SafeArrayPutElement(psa,&idx,&setdt);
idx=1;
setdt=342;
SafeArrayPutElement(psa,&idx,&setdt);V_VT(buffer) = VT_ARRAY | VT_I4;
V_ARRAY(buffer)=psa;return S_OK;
}
在C#中
object arr = new object[];
obj.vb2vc(arr);多试吧。