javascript从ActiveX控件中接收字符串(只适用于Unciode版本)

    技术2022-05-11  67

    VC代码片断:

    short CVC::GetList(BSTR List) { CString szList = _T("new string");  wcscpy(List, szList); return 0;} 

    BEGIN_DISPATCH_MAP(CVC, COleControl)

            DISP_FUNCTION(CVC, "GetList", GetList, VT_I2, VTS_BSTR) 

    END_DISPATCH_MAP()

    afx_msg short GetList(BSTR List);

    [id(1)] short GetList(BSTR List);

    JavaScript调用:

    //开一个足够大的字符串空间

    var aa = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111  11111111111111111111111111111111111111111111111111111111111111111111111111111111111";

    obj.GetList(aa);alert( aa);

    说明:1、这种方法可能会造成一些内存泄露,没有验证过。

                2、在比较字符串时要在末尾加上"/0",这是因为C/C++是以 "/0"结尾,而javascript好像不是(我也不知)

                如:var flag = "11111";                     obj.IsTrue(flag);  //在里面给flag赋值为字符串"true"                    if(flag == "true/0")                         alert("OK");

     

    网上也有这种调用方法:(这种我试了,不知道为什么不行)     IDL文件中这样声明     [id(1),   helpstring("method   GetString")]   HRESULT   GetString([out,retval]BSTR*     pstr);     头文件中:     STDMETHOD(GetString)(/*[out,retval]*/BSTR*     pstr);     CPP中         STDMETHODIMP   CCJSString::GetString(BSTR   *pstr)     {     USES_CONVERSION;     SysReAllocString(pstr,   T2OLE("xxxx"));         return   S_OK;     }         JS中直接调用就可以了,不需要填写参数   var   xx=   xxx.GetString();


    最新回复(0)