js向C++传参问题

White-平常 2019-03-14 02:27:30
小弟在此请教一个问题: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);]
}
}
...全文
296 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
White-平常 2019-03-18
  • 打赏
  • 举报
回复
该问题已解决,结贴。。。

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧