COM组件返回二维数组供javascript和客户端使用


COM组件中的主要代码


STDMETHODIMP CHcdpJiraAdapter::GetResult(VARIANT* pvarData)
{
// TODO:  在此添加实现代码


CComVariant varElement;
CComVariant varTable[5][3] = {
CComVariant("Hello"), CComVariant(160), CComVariant(1357.91),
CComVariant("world"), CComVariant(123), CComVariant(58.3721),
CComVariant("CHINA"), CComVariant(456), CComVariant(12.1),
CComVariant("USER"), CComVariant(5), CComVariant(13.4),
CComVariant("HAO"), CComVariant(6), CComVariant(5.1),
};


// Declare the variable used to store the
// array indexes
LONG aIndex[2];//aIndex[0] 表示第几列,aIndex[1] 表示第几行 


// Define the array bound structure
CComSafeArrayBound bound[2];
bound[0].SetCount(3);//列数
bound[0].SetLowerBound(0);
bound[1].SetCount(5);//行数
bound[1].SetLowerBound(0);


// Create a new 2 dimensional array
CComSafeArray<VARIANT> psArray(bound, 2);


// Use MultiDimSetAt to store characters in the array
for (int x = 0; x < 5; x++)
{
for (int y = 0; y < 3; y++)
{
aIndex[1] = x;//行
aIndex[0] = y;//列
HRESULT hr = psArray.MultiDimSetAt(aIndex, varTable[x][y]);
ATLASSERT(hr == S_OK);
}
}


CComVariant varData = psArray.m_psa;
varData.Detach(pvarData);


return S_OK;
}


html中使用com组件


<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
        function onBtnClick()
        {
            alert("onBtnClick");
         
            var vbArrayObj = new VBArray(HCDP.GetResult());
            var jsArray = vbArrayObj.toArray();//VB的数组转变成js数组后就变成一维的了


            var lBount = vbArrayObj.lbound();
            var uBount = vbArrayObj.ubound();
            var colCount = uBount - lBount + 1;
            var rowCount = jsArray.length / colCount;


            for(var i=0;i<rowCount;i++)
            {
                for(var j=0;j<colCount;j++)
                {
                    alert(jsArray[i*colCount+j]);
                }
            }


        }
    </script>
</head>
<body>
    <object id="HCDP" classid="CLSID:E68AA894-C65E-4FE7-AB77-328F46244B97"></object>
    <button οnclick="onBtnClick()">点击测试</button>
</body>
</html>









MSDN中关于CComsafeArray:

https://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=ZH-CN&k=k(CComSafeArray);k(DevLang-C%2B%2B);k(TargetOS-Windows)&rd=true

// Create a multidimensional array, 
// then write and read elements

// Define an array of character pointers
CComSafeArray<char> *pSar;

char cElement;
char cTable[2][3] = {'A','B','C','D','E','F'};

// Declare the variable used to store the
// array indexes
LONG aIndex[2];

// Define the array bound structure
CComSafeArrayBound bound[2];
bound[0].SetCount(3);
bound[0].SetLowerBound(0);
bound[1].SetCount(3);
bound[1].SetLowerBound(0);   

// Create a new 2 dimensional array
// each dimension size is 3
pSar = new CComSafeArray<char>(bound,2); 

// Use MultiDimSetAt to store characters in the array
for (int x = 0; x < 2; x++)
{
   for (int y = 0; y < 3; y++)
   {
      aIndex[0] = x;
      aIndex[1] = y;
      HRESULT hr = pSar->MultiDimSetAt(aIndex,cTable[x][y]);
      ATLASSERT(hr == S_OK);
   }
}
// Use MultiDimGetAt to retrieve characters in the array
for (int x = 0; x < 2; x++)
{
   for (int y = 0; y < 3; y++)
   {
      aIndex[0]=x;
      aIndex[1]=y;
      HRESULT hr = pSar->MultiDimGetAt(aIndex,cElement);
      ATLASSERT(hr == S_OK);
      ATLASSERT(cElement == cTable[x][y]);
   }   
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值