js向C++传参问题
小弟在此请教一个问题:js如何向C++的ATL工程传递一个数组?ATL工程中的函数如何声明?
这是ATL工程的代码:
STDMETHODIMP CATLTest::GetArray(VARIANT* SrcArray, LONG iLength, LONG iStart, LONG iStop, VARIANT* DestArray)
{
// TODO: 在此添加实现代码
SAFEARRAY FAR* psa;
SAFEARRAYBOUND rgsaBound[1];
if (!SrcArray || iStop > iLength) {
rgsaBound[0].lLbound = 0;
rgsaBound[0].cElements = 0;
psa = SafeArrayCreate(VT_VARIANT, 1, rgsaBound);
}
else {
--iStop, --iStart;
rgsaBound[0].lLbound = 0;
rgsaBound[0].cElements = iStop - iStart;
psa = SafeArrayCreate(VT_VARIANT, 1, rgsaBound);
long iIndex = 0;
VARIANT TempDt;
TempDt.vt = VT_INT;
for (int i = iStart; i < iStop; ++i) {
TempDt.pdispVal = SrcArray[i].pdispVal;
SafeArrayPutElement(psa, &iIndex, &TempDt);
iIndex++;
}
}
//返回一个安全数组
V_VT(DestArray) = VT_ARRAY | VT_VARIANT;
V_ARRAY(DestArray) = psa;
return S_OK;
}
这是javaScript的代码:
function GetArray(){
let para1 = document.getElementById("txtArray").value;
let para2 = document.getElementById("txtStart").value;
let para3 = document.getElementById("txtEnd").value;
let arrString = para1.split(" ");
let arrInt = new Array(5);
for (let index = 0; index < arrString.length; index++) {
arrInt[index] = parseInt(arrString[index]);
}
let iStart = parseInt(para2);
let iEnd = parseInt(para3);
console.log(arrInt);
if(iStart && iEnd){
let result = new VBArray(cpp_object.GetArray(arrInt, arrInt.length, iStart, iEnd)).toArray();
console.log(result);]
}
}