在javascript中使用com组件的简单实现方法


Posted in Javascript onAugust 17, 2016

首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法:

STDMETHODIMP Ctest::test(void) //无输入输出参数 
{ 
// TODO: 在此添加实现代码 
MessageBox(NULL,L"test",L"test",MB_OK); 

return S_OK; 
} 

STDMETHODIMP Ctest::test1(BSTR a1) //有一个字符串输入参数 
{ 
// TODO: 在此添加实现代码 
MessageBox(NULL,a1,L"test",MB_OK); 
return S_OK; 
} 
STDMETHODIMP Ctest::test3(BSTR* a1) //有一个BSTR* 输出参数 
{ 
// TODO: 在此添加实现代码 

MessageBox(NULL,L"test3",L"test",MB_OK); 
*a1=::SysAllocString (L"烽火连三月家书抵万金"); 
return S_OK; 
} 

COM 中的上述三个方法分别演示无输入输出参数、有一个输入参数、有一个输出参数三种情况。程序编制好后,用regsvr32在系统中注册组件,然后就可以在IE中用javascript调用com 组件的方法了,分两种情况掉用,示例如下:

1、直接调用com方法

建立一个html文本,并输入以下内容:

<html> 
 
<head> 
 
<title> 调用com组件的方法示例 </title> 
 
<script language="javascript"> 
 
document.write("<hr>") 
 
var xml=new ActiveXObject("atldll.test.1") 
 
xml.test() 
 
xml.test1("向com方法中传递参数并调用com方法")        
 
var str=xml.test3() //从com方法中返回参数 
document.write("str"+str) 
 
document.write(“<hr>”) 
 
</script> 
 
</head> 
 
<body> 

演示IE脚本程序中调用com组件的方法 
</body> 
 
</html>

2、在javascript函数中调用com方法

建立一个html文本,并输入以下内容:

<html> 
 
<head> 
 
<title> donghailin active object </title> 
 
<script type="text/javascript"> 
 
function displaymessage() 
 
{ 
 
document.write("<hr>") 
 
var xml=new ActiveXObject("atldll.test.1") 
 
xml.test() 
 
xml.test1("向com组件传递字符串")        
 
var str=xml.test3() //从com组件返回字符串 
document.write("str"+str) 
 
document.write(“<hr>”) 
 
} 
 
</script> 
 
</head> 
 
<body> 
 
<form> 
 
<input type="button" value="Click me!" onclick="displaymessage()" > 
 
</form> 
 
</body> 
 
</html>

注意编写的com组件供其他系统调用,因此输入输出参数字符串应是BSTR类型。

3、设置com组件的属性的方法

首先在com组件中设置属性。在接口类中赠加属性变量

BSTR m_bstr;

右键单击接口,选择“赠加”-〉“添加属性”在”添加属性向导中“输入属性类型” 中输入参数类型“BSTR” ,“属性名”输入“bstr",向导自动生成属性函数put_bstr和get_bstr,如下:

STDMETHODIMP Ctest::get_bstr(BSTR* pVal) 
{ 
 // TODO: 在此添加实现代码 
 *pVal=m_bstr; 
 return S_OK; 
} 
 
STDMETHODIMP Ctest::put_bstr(BSTR newVal) 
{ 
 // TODO: 在此添加实现代码 
 m_bstr=newVal; 
 
 MessageBox(NULL,m_bstr,L"属性测试",MB_OK); 
 return S_OK; 
}

下面的代码演示在IE的javascript脚本中设置和获得属性

<html> 
<head> 
<title> donghailin active object </title> 
 
<script type="text/javascript"> 
function displaymessage() 
{ 
document.write("<hr>") 
var xml=new ActiveXObject("atldll.test.1") 
xml.bstr="满园春色锁不住一枝红杏出墙来" //属性是bstr,C++ 中属性设置是put_bstr(...) 
document.write("属性返回值是:"+xml.bstr) //c++中获得属性值get_bstr(变量指针) 
document.write("<hr>") 
} 
</script> 
 
</head> 
<body> 
<table  align=center  width=50>  
<form> 
<input type="button" value="Click me!" onclick="displaymessage()" > 
</form> 
</table> 
 
</body> 
</html>

以上这篇在javascript中使用com组件的简单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js数字输入框(包括最大值最小值限制和四舍五入)
Nov 24 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
Jquery使用val方法读写value值
May 18 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
浅谈JavaScript 浏览器对象
Jun 03 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
Aug 08 Javascript
javascript的document中的动态添加标签实现方法
Oct 24 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
Nov 30 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
Dec 12 Javascript
vue之nextTick全面解析
May 17 Javascript
轻量级JS Cookie插件js-cookie的使用方法
Mar 22 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 #Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
Aug 17 #Javascript
BOM系列第一篇之定时器setTimeout和setInterval
Aug 17 #Javascript
BOM系列第二篇之定时器requestAnimationFrame
Aug 17 #Javascript
AngularJS 视图详解及示例代码
Aug 17 #Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
Aug 17 #Javascript
AngularJS Ajax详解及示例代码
Aug 17 #Javascript
You might like
php开发工具之vs2005图解
2008/01/12 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
js实现页面图片消除效果
2020/03/24 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
Python装饰器使用示例及实际应用例子
2015/03/06 Python
python装饰器与递归算法详解
2016/02/18 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
python实现简单神经网络算法
2018/03/10 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
高中毕业生个人自我鉴定
2013/11/24 职场文书
运动会广播稿200字
2014/01/15 职场文书
人事助理自荐信
2014/02/02 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
付款委托书范本
2014/10/05 职场文书
教师节慰问信
2015/02/15 职场文书
学校开除通知书
2015/04/25 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书