vc++与javascript交互,如何返回字符串给javascript?

wang1st 2011-02-17 02:04:55
我用web browser控件做了一个对话框,并做了IDispatch扩展,这样调用javascript的函数,以及通过javascript调用c++实现的函数都没有问题了。现在我要实现一个函数,就是javascript传回一个UNICODE字符串给vc,vc修改字符串变成GB2312的字符串后返回到javascript,这个怎么做呢?我下面做的方法有问题,程序会马上崩溃,说是堆栈被破坏,请高手指点?

BEGIN_DISPATCH_MAP(CMyDlg, CDialogEx)
DISP_FUNCTION(CMyDlg,"UTF8TOGB2312",UTF8ToGB2312,VTS_BSTR,VTS_BSTR)
END_DISPATCH_MAP()

BSTR CMyDlg::UTF8ToGB2312(LPCTSTR vStr1)
{
BSTR bsRet;
//...这里处理一些转换的工作
return bsRet;
}

然后在javascript里调用 var s_gb2312= window.external.UTF8TOGB2312(s_unicode);

然后就崩溃了。。。
...全文
849 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
szhxc111 2011-09-16
  • 打赏
  • 举报
回复
多谢6,7楼的答复,答案是可行的。
柚子毛驴 2011-05-25
  • 打赏
  • 举报
回复
参数是指针就是可以选择 [out,retval] 属性了。
tompaz 2011-05-25
  • 打赏
  • 举报
回复
为啥不用ie扩展来做?
shelok 2011-05-23
  • 打赏
  • 举报
回复

funciont ConvertResultToJS(result)
{
// ... process code
}


这是转换之后C++调用JS里的脚本函数ConvertResultToJS,将结果传给JS.

CSimpleArray<CString> sArray;
CString strConvert = UTF8ToGB2312();
sArray.Add(strConvert);
CComVariant vResult;
InvokeScript(L"ConvertResultToJS",sArray, &vResult);


InvokeScript是你封装好的能调用JS接口的方法。

qman007 2011-03-10
  • 打赏
  • 举报
回复
BSTR CMyDlg::UTF8ToGB2312(LPCTSTR vStr1)
{
wchar_t wcsBuf[8192]; //两页长度够用了吧?
memset(wcsBuf,0,sizeof(wcsBuf));
//...这里处理一些转换的工作
return ::SysAllocString(wcsBuf);
}
masterz 2011-03-05
  • 打赏
  • 举报
回复
他们之间通过VARIANT类型传入传出数据,但是jscript应该不支持gb2312字符串,只支持unicode (BSTR).
wang1st 2011-02-21
  • 打赏
  • 举报
回复
自己顶一下
wang1st 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 l35633 的回复:]
类视图里找到接口,右键可以添加,然后在idl文件里可以找到的,切记一点,必须是([out,retval]类型,脚本调用才可以获取到的,retval不要少
[/Quote]

这个idl文件以及类视图里,是针对哪个类呢?我现在只是做了一个IDispatch扩展而已,并没有自己重新写一个类的接口。
  • 打赏
  • 举报
回复
类视图里找到接口,右键可以添加,然后在idl文件里可以找到的,切记一点,必须是([out,retval]类型,脚本调用才可以获取到的,retval不要少
wang1st 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hdt 的回复:]
如果是控件内返回字符串给js
控件的接口方法要用
HRESULT youmethod([out,retval]BSTR** DDD);
调用
var sss = youmethod();
[/Quote]

谢谢你的回答,那这样的函数在哪个地方实现呢?
真相重于对错 2011-02-17
  • 打赏
  • 举报
回复
如果是控件内返回字符串给js
控件的接口方法要用
HRESULT youmethod([out,retval]BSTR** DDD);
调用
var sss = youmethod();

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧