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]); } }