JS调用OCX接口时,只能接收到一个值,但是想接收接口中的多个值,该怎么设计呢?希望能给出点代码。

解决方案 »

  1.   

    没有用过OCX,不过C++中遇到这种情况,有两种解决方法:
    1、定义一个结构,包含多个值,把结构作为返回值。
    2、通过引用参数,也可以返回值。f(int &p)
    {
       p=25;
    }
      

  2.   

    增加一个实现IDispatch接口的对象,然后返回对象。
      

  3.   

    用SAFEARRAY可以实现,我做了个测试,但是在javascript调用OCX接口时,页面报“缺少VBArray”错误,不知道是哪个地方的问题,难道是接口没有将数组返回?代码如下:
    STDMETHODIMP CZNActiveXATL::MTT(VARIANT* Result)   //返回类型:[out][retvar]
    {          
        long result[2];//用于存储*result_count和*ResultArray          
        result[0] = 12;// 
        result[1] =21;//      
        SAFEARRAY *pSa =NULL;//define the pointer to the safearray 
        VariantInit(Result);//Init 
        (* Result).vt = VT_I4 | VT_ARRAY;// 
        (* Result).parray = pSa; 
        HRESULT hr = SafeArrayAllocDescriptor(1,&pSa); 
        pSa->cbElements = sizeof(result[0]);//数组元素的大小 
        pSa->rgsabound[0].cElements = 2;//一行中元素的个数 
        pSa->rgsabound[0].lLbound = 0;// 
        SafeArrayAllocData(pSa); 
        long* pData=NULL; 
        SafeArrayAccessData(pSa,(void**)&pData); 
        long l(0),h(0); 
        SafeArrayGetLBound(pSa,1,&l);////维数索引从1开始 
        SafeArrayGetUBound(pSa,1,&h); 
        long Size=h-l+1; 
        SafeArrayAccessData(pSa,(void**)&pData); 
        for(long Idx=l;Idx<Size;++Idx){ 
            pData[Idx] = result[Idx]; 
        } 
        SafeArrayUnaccessData(pSa);       
        MessageBox(NULL, L"vertify..9.1:N!", L"demo", MB_OK);         
       return S_OK; 
    }
    JS端调用代码:
    var Vresult =  CZNActiveXATL.MTT(); 
    var result = new VBArray(Vresult).toArray();//提示缺少VBArray 
    alert(result[0]);