js怎么调用mfc activex 调用js

ActiveX与JavaScript交互_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
ActiveX与JavaScript交互
上传于||文档简介
&&ActiveX与JavaScript交互机制
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢3667人阅读
c++(176)
本文研究如何在JS等脚本语言与ActiveX控件之间通信,如何传递各种类型的参数,以及COM的IDispatch接口。使用类似的方法,可以推广到其他所有脚本型语言,如LUA,AutoCad等。
本文将研究以下几个方面:
1.&&&&&&&&
整形数组传参
2.&&&&&&&&
字符串参数,字符串返回值
3.&&&&&&&&
修改传入字符串内容
4.&&&&&&&&
5.&&&&&&&&
IDispatch接口介绍
6.&&&&&&&&
修改输入数组内容
7.&&&&&&&&
增加数组内容
8.&&&&&&&&
以数组传参方式,JS调用S4Execute( )
(一)整形参数
1. &&&&&&& 整形参数,可直接传递。整形返回值需要以 [retVal] Long *方式声明
2. &&&&&& COM中c++接口定义
STDMETHODIMP CJsAtl::IntSum(LONG a, LONG b, LONG* retVal)
&&&&&&&& *retVal = a +
&&&&&&&& return S_OK;
3. &&&&&& Js中调用
&object id=&obj& classid=&CLSID:AD694878-......&& &/object&
function test_int()
&&&&&& var a = 1;
&&&&&& var b = 2;
&&&&&& try {
&&&&&& &&&&&& var obj = document.getElementByIdx_xx_x(&obj&);
&&&&&& &&&&&& var retVal = obj.IntSum(a, b);
&&&&&& &&&&&& Alert(&RetVal: & + retVal);
&&&&&& } catch (e) {
&&&&&& &&&&&& Alert( &Js error: & + e.message);
&(二)字符串参数,字符串返回值
1.&&&&&&&& COM中,字符串使用BSTR表示,BSTR实际是UNICODE 字符数组(WCHAR[])
2.&&&&&&&& COM字符串传参规范中规定:
a)&&&&&&&&
生成字符串变量时,需要SysAllocString/SysAllocStringByteLen分配空间。
函数结束前,分配的空间需要释放,SysFreeString。
c)&&&&&&&&
若函数中分配的空间作为返回值,则不释放。而由外部调用者负责释放。
3.&&&&&&&& COM中c++函数定义
STDMETHODIMP CJsAtl::StringAdd(BSTR str1, BSTR str2, BSTR* retVal)
&&&&&&&& int len = SysStringLen(str1);
&&&&&&&& len += SysStringLen(str2);
len += 4;&&&
// 保证有'\0'结尾
BSTR result = SysAllocStringLen(NULL, len);
memset(result, 0, len * 2);&&&&&
// 双字节字符
StrCat(result, str1);
&&&&&&&& StrCat(result, str2);
*retVal = //
设置返回值指针。注:不释放内存&&
return S_OK;
4.&&&&&&&& JS中调用
function test_str_cat()
&&&&&& var a = &123&;
&&&&&& var b = &abc&;
&&&&&& try {
&&&&&& &&&&&& var obj = document.getElementByIdx_xx_x(&obj&);
&&&&&& &&&&&& var retVal = obj.StringAdd(a, b);
&&&&&& &&&&&& alert(&RetVal: & + retVal);
&&&&&& } catch (e) {
&&&&&& &&&&&& alert(&JS ERROR: & + e.message);
(三)修改传入字符串内容
1.&&&&&&&& 原则上,不应修改传入字符串的内存数据,否则可能破坏数据,造成js端异常。
2.&&&&&&&& 使用中,可通过修改传入字符串缓冲区内容的方法,实现参数传递。
3.&&&&&&&& 不能使用SysFreeString破坏传入的BSTR参数,否则会破坏js内存结构
4.&&&&&&&& COM中C++定义
STDMETHODIMP CJsAtl::StrModify(BSTR str)
&&&&&&&& int len = SysStringLen(str);&&
// 注:此方法修改BSTR,不能破坏原占用内存,不能越界访问
i = 0; i & i++)
&&&&&&&& &&&&&&&&
str[i] = '0' +
return S_OK;
5.&&&&&&&& JS调用
function test_str_modify()
&&&&&& var str = &abcdefghijklmn&;
&&&&&& try {
&&&&&& &&&&&& var obj = document.getElementByIdx_xx_x(&obj&);
&&&&&& &&&&&& obj.StrModify(str);
&&&&&& &&&&&& alert(&After modify: & + str);
&&&&&& } catch (e) {
&&&&&& &&&&&& alert(&JS ERROR: & + e.message);
6.&&&&&&&& 测试执行
原字符串:&&& abcdefghijklmn
调用后:&&&&&& :;&=
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:701956次
积分:7255
积分:7255
排名:第2403名
原创:55篇
转载:234篇
评论:116条
(2)(1)(1)(1)(1)(1)(1)(3)(9)(1)(3)(5)(9)(11)(32)(5)(2)(5)(2)(4)(1)(1)(1)(3)(16)(10)(15)(18)(25)(2)(6)(7)(10)(3)(13)(4)(1)(5)(3)(3)(3)(4)(5)(3)(7)(13)(6)(1)(1)> 怎么使用js调用系统命令
怎么使用js调用系统命令
lyf0815 & &
发布时间: & &
浏览:10 & &
回复:0 & &
悬赏:0.0希赛币
如何使用js调用系统命令
1、第一点,必须把IE浏览器的安全性设置得非常低,允许执行activx控件。不然会返回这个错误:"Automation 服务器不能创建对象"2、只能在IE6,7,8下面执行。举例如下:事例1:var cmd = new ActiveXObject("WScript.Shell");var command = "echo Hello World!" //这里是执行的DOS命令cmd.run("cmd.exe /k "+command);cmd =事例2:var objShell = new ActiveXObject("wscript.shell");objShell.Run("c:\\windows\\system32\\arp.exe -a");objShell=在JS也可以把它封装成函数:  &SCRIPT language=JavaScript&
RunCmd(strPath)
var objShell
new ActiveXObject( "wscript.shell ");
objShell.Run(strPath);
objShell =
catch (e){alert( '找不到文件: '+strPath)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&> 博客详情
昨天我们的代码狂人叫我一天帮他做个web页面可以用来调试ActiveX控件的.
我的第一反应....ActiveX控件?啥..没接触过.不知道能不能搞..狂人告诉我3个小时后就要去人家公司调试用的.必须做好.
我霸气的说:"好,没问题!搞不出来我剁手".当然只是玩笑话,不过有种置于死地而后生的感觉.
首先百度下啥是ActiveX控件:按我的理解就是,打包成一个库,之后在windows上注册,然后就能在该台windows上用这个插件了.(我的电脑是MAC系统呀,算了找台windows折腾吧)
第一步:注册
(注意:控件与系统是不是一样都是32位或者64位,注册不成功可能是少装了一些库)
吐槽:在和其他合作捣鼓一个东西的时候,我们虽然可能没办法解决问题,但可以帮其他人一起找出问题所在.不要以为"事不关己高高挂起".
输入 & regsvr32 C:\xxxx.ocx (XXXX为控件名, C:\为目录))
成功的话会弹出成功提示
第二步:添加到HTML
这一步其实不难,就是繁琐.直接上代码
&OBJECT&id="EpecPhoneAX"
&&&&&&&&WIDTH="800"&HEIGHT="400"
&&&&&&&&classid="CLSID:D14-45AC-84A7-215FE3117778"&
这里有些参数要说明下.object里的id是用来js调用事件的,所以可以随便起个,classid是在注册成功后生成的,用来识别你用的是哪个ocx,所以说是唯一的.
至于如何找到classid有几种方法,可以百度下,我使用Microsoft ActiveX Control Pad这个软件.写这篇文章的时候,我已经都调试好了,之前也没有截图,所以稍微的说下用MACP取classid的流程吧.
获取classid
用MACP新建一个HTML页面,然后再选择Insert ActiveX Control插入一个控件,type就是你的控件名,如果注册成功的话,就可以在type里面找到,插入成功后,在object里面就可以复制classid出来了.
自此就可以在html上看到这个ocx了.
第三步:用JavaScript调用方法and触发事件
这个最简单,直接上代码
&&&&var&obj&=&document.getElementById("EpecPhoneAX");
&&&&obj.MakeCall(MakeCall_pchNumber);
object里的id就是在这时候起到作用的.
&SCRIPT&type="text/javascript"&FOR="EpecPhoneAX"&EVENT="OnPhoneRegistrationOk(varMsg)"&
&&&&showInfo_evt(varMsg);
for里面填的是id &event写的是触发的事件名,而varMsg是他的返回值.
其实这里我也不太了解,大概估计是一个回调函数,因为我也不清楚他的c++是怎么写的.
第四步:让控件页面可以兼容
据我百X,谷X一段时间之后所知,ActiveX控件只能运行在IE上,因为这原本就是微软的东东,如果你想运行在其他浏览器上,就只能做成浏览器的插件,提供个关键词有需要的人可以去查查NPAPI(Netscape Plugin Application Programming Interface,网景插件应用程序接口).
收工......
人打赏支持
码字总数 14006
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区google浏览器js不能调用activeX?有什么办法可以解决
google浏览器js不能调用activeX?有什么办法可以解决?非常急
以下是问题补充:
是指ActivexObject
考虑服务器上语音合成吧,浏览器通吃,只不过服务器比较吃力
--- 共有 1 条评论 ---
另外,也可以考虑嵌入applet或者flash组件,这两个调用本地组件比js稍有优势。
http://www.oschina.net/p/activex-for-chrome
话说firefox就可以吗?除了ietab
http://www.oschina.net/p/activex-for-chrome ietab
这个两个都不行,他们只支持部分。我用做网页语音播报不行,不行
--- 共有 1 条评论 ---
如果是面向不可控的用户你只有两种选择,放弃这种IE only的东西,至少为其他浏览器单独写插件而不是activeX,就如支付宝登录控件,建行网银做的事情;或者牛逼点让用户只能用IE
这两种最多只能解决你自己不能使用AX的问题,用户不可控是没办法的
引用来自“袁国涛”的答案考虑服务器上语音合成吧,浏览器通吃,只不过服务器比较吃力good

我要回帖

更多关于 js调用activex 的文章

 

随机推荐