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

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值