您好,请问为什么用VBArray()将ATL COM中返回的数组类型变量转换为Javascript的数组时说缺少VBArray?谢谢。
以下是javascript脚本和COM中的代码。在VB中没有问题,但是在javascript中不能实现,谢谢。
<script language="javascript" type="text/javascript">
window.onload=initAll
function initAll(){
var comObj=new ActiveXObject("ATLTest2.test1");
VBArrayTest(comObj.GetArray());
}
function VBArrayTest(vbarray)
{
var b=new Array(3);
var a= new VBArray(vbarray);//这里出错。
b = a.toArray();
var i;
for (i = 0; i < 3; i++)
{
alert(b[i]);
}
}
</script>
STDMETHODIMP Ctest1::GetArray(VARIANT* aName)
{
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements =3;
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_BSTR,1,rgsabound);
BSTR *buf;
SafeArrayAccessData(psa, (void **)&buf);
buf[0]=_T("Can ");
buf[1]=_T("You ");
buf[2]=_T("Me ");
SafeArrayUnaccessData(psa);
(*aName).vt = VT_ARRAY|VT_BSTR;
(*aName).parray = psa;
return S_OK;
}
以下是javascript脚本和COM中的代码。在VB中没有问题,但是在javascript中不能实现,谢谢。
<script language="javascript" type="text/javascript">
window.onload=initAll
function initAll(){
var comObj=new ActiveXObject("ATLTest2.test1");
VBArrayTest(comObj.GetArray());
}
function VBArrayTest(vbarray)
{
var b=new Array(3);
var a= new VBArray(vbarray);//这里出错。
b = a.toArray();
var i;
for (i = 0; i < 3; i++)
{
alert(b[i]);
}
}
</script>
STDMETHODIMP Ctest1::GetArray(VARIANT* aName)
{
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements =3;
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_BSTR,1,rgsabound);
BSTR *buf;
SafeArrayAccessData(psa, (void **)&buf);
buf[0]=_T("Can ");
buf[1]=_T("You ");
buf[2]=_T("Me ");
SafeArrayUnaccessData(psa);
(*aName).vt = VT_ARRAY|VT_BSTR;
(*aName).parray = psa;
return S_OK;
}
buf[1]=SysAllocString(OLESTR("You "));
buf[2]=SysAllocString(OLESTR("Me "));
谢谢。
您这种方法不仅在javascript中仍然是“运行时错误,缺少VBArray”,
同时在VB中也无法通过函数返回数组,谢谢。
你使用typeof VBArray检测看看。
alert(typeof VBArray) 显示 function
咋办?
var b = new VBArray(comObj.GetArray()).toArray();
不行,还是那个错误。是不是我atl写错了,您以前写过吗?可以给我参考参考吗?呵呵,谢谢。