VC ATL项目和JavaScript之间怎样传输字符串,例如下面这个简单的函数,帮忙改改,最好能同时提供一下Java Script的调用代码
//普通VC函数
char * UniteStr(char * s1, char * s2, char * s3)
{
sprintf(s3, "%s%s", s1, s2);
return s3;
}
//照着上面的改下来,大概是这样,可是这样不能给Java Script使用
STDMETHOD UniteStr(/*[in]*/CHAR * s1, /*[in]*/CHAR * s2,
/*[in]*/CHAR * s3, /*[out,retval]*/CHAR * Out)
{
sprintf(s3, "%s%s", s1, s2);
Out = s3;
return S_OK;
}

解决方案 »

  1.   

    直接在函数中调用JavaScript的函数不行吗?
      

  2.   

    上面是举个简单的函数示例,我真正封装的东西,在JavaScript中没办法实现
      

  3.   

    STDMETHOD UniteStr(/*[in]*/BSTR s1, /*[in]*/BSTR s2, /*[in]*/BSTR s3, /*[out,retval]*/BSTR * Out) 

      CComBSTR bstr = s1;
      bstr += s2;
      *Out = bstr.Detach(); 
      return S_OK; 
    }js call:
    var out = obj.UniteStr("abc", "def", "ghi");
    if (out=="abcdef")
      ...
      

  4.   

    返回单个字符串的可以了,怎样返回多个字符串呢,例如原函数为:void GetResult(char * sResult1, char * sResult2, char * sResult3)
    {
        strcpy(sResult1, "The sResult1: 111111");
        strcpy(sResult2, "The sResult2: 222222");
        strcpy(sResult3, "The sResult3: 333333");
        return;
    }
      

  5.   

    js对多个out类型参数的支持不好,应避免使用。
      

  6.   

    你是想通过JS向ATL写的组件传参数吗?
    ATL组件的参数如果是字符串都是用BSTR来传递的。
      

  7.   

    js只能返回一个值,建议vbs和js合着用,vbs可以的