传递的字节数组从ActiveX来的JavaScript,反之亦然 [英] Passing array of bytes from ActiveX to javascript and vice versa

查看:255
本文介绍了传递的字节数组从ActiveX来的JavaScript,反之亦然的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要传递的数据(字节数组,即字符*)从ActiveX对象(使用Visual C ++与ATL)到我的javascript code(反之亦然)。我已经挖了网络对于这样的问题,并试图解决方案很多,但都没有成功。我已经试过如下:


  • 转换的char *为BSTR并把它传递给JavaScript(JS),但我的结果是JS由于我的数据的性质不是字符串。

  //在C ++:
STDMETHODIMP CActiveXObj :: F(BSTR * MSG)//味精是ATL自动化函数的返回值
{
    字符*缓冲区; //字节的数据存储在缓冲
    *味精= SysAllocStringByteLen((LPCSTR)缓冲液,缓冲区长度+ 1);
}
////////////////////////////////////////////////// ////////////////////////
//在JavaScript中:
VAR MyObj中=新的ActiveXObject(IGCE.ActiveXObj);
VAR的结果= myobj.f(); //结果=


  • 从C中传递字节数据的安全数组++

任何人都可以请给我以最简单的形式工作code?

非常感谢你!

克莉丝汀


解决方案

  //在* .idl文件
[propget子,ID(0)] HRESULT ArrayProperty([出,RETVAL] SAFEARRAY(VARIANT)*粒子阵列);
[propput,ID(0)] HRESULT ArrayProperty([IN] SAFEARRAY(VARIANT)阵列);
//某处在JavaScript功能ax2js(axArray){
    返回新的VBArray(阵列).toArray();
}功能js2ax(jsArray){
    VAR字典=新的ActiveXObject(的Scripting.Dictionary);    对于(VAR I = 0; I< jsArray.length;我++){
        dict.add(ⅰ,jsArray [I]);
    }    返回dict.Items();
}功能fooHandler(){
    变种AX =新的ActiveXObject(My.My);    VAR AR = ax2js(ax.ArrayProperty);    ax.ArrayProperty = js2ax(AR);
}

I need to pass data (byte array, i.e char*) from ActiveX object (using Visual C++ with ATL) to my javascript code (and vice versa). I've digged the Web for such problem and tried lots of solutions but have not succeeded. I've tried the followings:

  • Converting char* to BSTR and pass it to javascript (JS), but my result in JS is "", due to the nature of my data is not string.

//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 = ""

  • Pass safe array of byte data from C++

Could anyone please give me the working code in its simplest form?

Thank you very much!

Kristin

解决方案

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

这篇关于传递的字节数组从ActiveX来的JavaScript,反之亦然的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆