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

首先创建一个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组件的简单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 用JavaScript编写COM组件的步骤

    支持这些接口的脚本语言有:JavaScript/JScript.VBScript.Perl和Python等. WSC有以下特点.  小巧高效:  易于创建.维护和部署:  提供了创建COM部件的能力:  提供了访问大量系统服务的能力. 用JavaScript编写COM组件的核心工作是完成一个.wsc(Windows Scripting Component)文件..wsc文件是一种标准的XML文件,其格式如下: <?xml version="1.0" encoding=&q

  • 在jsp程序中使用com组件

    在jsp程序中使用com组件的机会并不多,jsp也没有直接操作com的函数,但有的工作有时候还必须使用com组件来完成,下面就来说一下具体的操作方法. 在jsp中使用com组件有两种方法:一种是用javascript在客户端来控制(严格说这个应该是html的功能),如: <OBJECT id="myCom" classid="clsid:9D8A2E2F-D38F-CDAC-D0C5-5B3FB2275442" codebase=".com/com.

  • 引入autocomplete组件时JS报未结束字符串常量错误

    就我的问题以及解决办法: 我在引入jQuery的autocomplete组件时,遇到js报未结束字符串常量错误. 原因分析:首先,右击页面查看编码是utf-8, 其次,查看js报错的函数,以及找到对应的函数. 发现原来jQuery.autocomplete.js中的感叹号为中文的即!将其修改为英文的!,出错问题解决.

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

    首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法: STDMETHODIMP Ctest::test(void) //无输入输出参数  {  // TODO: 在此添加实现代码  MessageBox(NULL,L"test",L"test",MB_OK);  return S_OK;  }  STDMETHODIMP Ctest::test1(BSTR a1) //有一个字符串输入参数  {  // TODO: 在此添加实现代码  Me

  • js中获取键盘事件的简单实现方法

    <script type="text/javascript" language=JavaScript charset="UTF-8"> document.onkeydown=function(event){ var e = event || window.event || arguments.callee.caller.arguments[0]; if(e && e.keyCode==27){ // 按 Esc //要做的事情 } if(

  • Android开发之组件GridView简单使用方法示例

    本文实例讲述了Android开发之组件GridView简单使用方法.分享给大家供大家参考,具体如下: 案例:简单的图片浏览器,保存图片到相册 保存图片到相册 方法代码:https://www.jb51.net/article/158668.htm 废话不多说先上效果: 具体实现: 首先是布局文件: 1.一个GridView(展示所有的图片) 2.一个ImageView(放选中的图片) <?xml version="1.0" encoding="utf-8"?&

  • JavaScript中十种一步拷贝数组的方法实例详解

    JavaScript中我们经常会遇到拷贝数组的场景,但是都有哪些方式能够来实现呢,我们不妨来梳理一下. 1.扩展运算符(浅拷贝) 自从ES6出现以来,这已经成为最流行的方法.它是一个很简单的语法,但是当你在使用类似于React和Redux这类库时,你会发现它是非常非常有用的. numbers = [1, 2, 3]; numbersCopy = [...numbers]; 这个方法不能有效的拷贝多维数组.数组/对象值的拷贝是通过引用而不是值复制. // numbersCopy.push(4);

  • JavaScript中发出HTTP请求最常用的方法

    JavaScript具有很好的模块和方法来发送可用于从服务器端资源发送或接收数据的HTTP请求.在本文中,我们将介绍一些在JavaScript中发出HTTP请求的流行方法. Ajax Ajax是发出异步HTTP请求的传统方式.可以使用HTTP POST方法发送数据,并使用HTTP GET方法接收数据.我们来看看发送GET请求.我将使用JSONPlaceholder,这是一个免费的在线REST API,适用于以JSON格式返回随机数据的开发人员. 要在Ajax中进行HTTP调用,您需要初始化一个新

  • JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍

    •原理: •高级浏览器支持forEach方法 语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: •forEach:用来遍历数组中的每一项:这个方法执行是没有返回值的,对原来数组也没有影响: •数组中有几项,那么传递进去的匿名回调函数就需要执行几次: •每一次执行匿名函数的时候,还给其传递了三个参数值:数组中的当前项item,当前项的索引index,原始数组input: •理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行

  • JavaScript中Textarea滚动条不能拖动的解决方法

    本文实例分析了JavaScript中Textarea滚动条不能拖动的解决方法.分享给大家供大家参考,具体如下: 在IE中,你是否碰到过Textarea的滚动条不能拖动,但点上下按钮可以滚动内容? 这个问题的原因很可能就是在该Textarea中绑定了onfocus事件,但是,基于某种条件,又将其焦点去掉(即blur()),这样就导致滚动条不能拖动. 一个典型的例子为: me.$input.on("focus",function(){ if ($isIE && me.ena

  • java web中图片验证码功能的简单实现方法

    用户在注册网站信息的时候基本上都要数据验证码验证.那么图片验证码功能该如何实现呢? 大概步骤是: 1.在内存中创建缓存图片 2.设置背景色 3.画边框 4.写字母 5.绘制干扰信息 6.图片输出 废话不多说,直接上代码 package com.lsgjzhuwei.servlet.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buffer

  • JavaScript中数组去除重复的三种方法

    废话不多说了,具体方法如下所示: 方法一:返回新数组每个位子类型没变 function outRepeat(a){ var hash=[],arr=[]; for (var i = 0; i < a.length; i++) { hash[a[i]]!=null; if(!hash[a[i]]){ arr.push(a[i]); hash[a[i]]=true; } } console.log(arr); } outRepeat([2,4,4,5,"a","a"

  • javascript中去除数组重复元素的实现方法【实例】

    在实际应用中,我们很多时候都可能需要去除数组中的重复元素,下面就是javascript数组去重的方法实现: <script language="javascript"> <!-- /*判断数组中是否存在某个元素的方法*/ function isExistInArr(_array, _element){ if(!_array || !_element) return false; if(!_array.length){ return (_array == _elemen

随机推荐