在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 相关文章推荐
关于图片验证码设计的思考
Jan 29 Javascript
js实现双向链表互联网机顶盒实战应用实现
Oct 28 Javascript
JavaScript的Module模式编程深入分析
Aug 13 Javascript
页面装载js及性能分析方法介绍
Mar 21 Javascript
javascript实现简单的进度条
Jul 02 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 Javascript
浅谈JS封闭函数、闭包、内置对象
Jul 18 Javascript
JQuery中queue方法用法示例
Jan 31 jQuery
layui 实现table翻页滚动条位置保持不变的例子
Sep 05 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 30 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
Sep 11 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的中问验证码
2006/11/25 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
js最简单的拖拽效果实现代码
2010/09/24 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Django实现快速分页的方法实例
2017/10/22 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
Python关于反射的实例代码分享
2020/02/20 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
领班岗位职责范文
2014/02/06 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
大雁塔导游词
2015/02/04 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
父亲节感言
2015/08/03 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
mysql配置SSL证书登录的实现
2021/09/04 MySQL
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记