ocx返回数组,js调用不成功。到底哪里错了 20C

ocx控件,里面添加了一个方法返回double数组,js调用ocx接接收数组。代码如下,不知道哪里有问题。请大神帮忙看看
ocx方法代码:没有输入输出参数,返回了一个VARIANT数组
VARIANT CSmoocxCtrl::TESTto(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

SAFEARRAY *psa;   // 定义psa类型为SAFEARRAY*
SAFEARRAYBOUND rgsabound[1];  // 定义数组的维度
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 3;
psa = SafeArrayCreate( VT_R8, 1, rgsabound );   // 创建一个SAFEARRAY
double *bstrArray;
SafeArrayAccessData(psa,(void **)&bstrArray);// 并且用SafeArrayAccessData将psa与bstrArray进行绑定   
bstrArray[0] = 1000.0;
bstrArray[1] = 5.50;
bstrArray[2] = 2.80;
SafeArrayUnaccessData(psa); 

VARIANT vaResult;
VariantInit(&vaResult);
vaResult.vt = VT_ARRAY|VT_R8;

// TODO: 在此添加调度处理程序代码
vaResult.parray = psa;
return vaResult;

}

js调用代码:


测试OCX控件



id="Smoocx"
classid="clsid:CC40D1EF-2EDE-400E-9F85-E292D2805F83"
name= "content"
width=50%
height=210>

function TESTto() { var vba = Smoocx.TESTto(); var jsa = new VBArray(vba).toArray();//使用VBarray读取safearray alert (jsa[3]); }

帮帮忙,急!!!

2个回答

如果你在本地客户端测试了你的ocx并且没有问题,那么可能是权限的问题或者是ocx没有加载。先在客户机上注册下你的ocx,然后把你的浏览器的安全等级调低看看。

wcf5188
wcf5188 如果把上面转换的double数组改成BYTE,VT_R8改成VT_UI1则编译通过。。请问封装double数组和BYTE数组有什么别的不同吗
2 年多之前 回复
wcf5188
wcf5188 你好。我的ocx是注册过的,在IE中运行测试时,报错:ocx输出的不是vbarray
2 年多之前 回复

楼上正解,本地客户端先试
如果客户端没问题,检查:
1、用管理员权限运行IE,其他浏览器更不行
2、IE允许运行控件

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!