在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 相关文章推荐
jQuery总体架构的理解分析
Mar 07 Javascript
原生javascript图片自动或手动切换示例附演示源码
Sep 04 Javascript
在百度知道团队中快速审批新成员的js脚本
Feb 02 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
May 15 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
Jul 10 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
Dec 13 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
Oct 23 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
Dec 30 Javascript
flag和jq on 的绑定多个对象和方法(必看)
Feb 27 Javascript
如何区分vue中的v-show 与 v-if
Sep 08 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伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
详解python基础之while循环及if判断
2017/08/24 Python
python批量下载抖音视频
2019/06/17 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
Python实现TCP通信的示例代码
2019/09/09 Python
python logging模块的使用
2020/09/07 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
三年级数学教学反思
2014/01/31 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL