gpt4 book ai didi

javascript - 将字节数组从 ActiveX 传递到 javascript,反之亦然

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:13 25 4
gpt4 key购买 nike

我需要将数据(字节数组,即 char*)从 ActiveX 对象(使用带有 ATL 的 Visual C++)传递到我的 javascript 代码(反之亦然)。我已经为此类问题挖掘了 Web 并尝试了很多解决方案但没有成功。我尝试了以下方法:

  • 将 char* 转换为 BSTR 并将其传递给 javascript (JS),但我在 JS 中的结果是“”,因为我的数据的性质不是字符串。
//in C++:
STDMETHODIMP CActiveXObj::f(BSTR* msg) // msg is the return value in ATL automation function
{
char *buffer; // byte data is stored in buffer
*msg = SysAllocStringByteLen((LPCSTR)buffer, bufferLen+1);
}
//////////////////////////////////////////////////////////////////////////
//in JavaScript:
var myobj= new ActiveXObject("IGCE.ActiveXObj");
var result = myobj.f(); // result = ""
  • 从 C++ 传递安全的字节数据数组

谁能给我最简单形式的工作代码?

非常感谢!

克里斯汀

最佳答案

// In *.idl file 
[propget, id(0)] HRESULT ArrayProperty([out, retval] SAFEARRAY(VARIANT) *pArray);
[propput, id(0)] HRESULT ArrayProperty([in] SAFEARRAY(VARIANT) Array);


// Somewhere in javascript

function ax2js(axArray) {
return new VBArray(array).toArray();
}

function js2ax(jsArray) {
var dict = new ActiveXObject("Scripting.Dictionary");

for (var i = 0; i < jsArray.length; i++) {
dict.add(i, jsArray[i]);
}

return dict.Items();
}

function fooHandler() {
var ax = new ActiveXObject("My.My");

var ar = ax2js(ax.ArrayProperty);

ax.ArrayProperty = js2ax(ar);
}

关于javascript - 将字节数组从 ActiveX 传递到 javascript,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1926723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com