在JavaScript中调用COM组件的完整实现指南

作者:拾光

时间:2026-10-30

浏览:258

本文详细介绍如何在IE浏览器环境中通过JavaScript调用本地COM组件。涵盖创建双接口、实现无参/有参方法及输出参数处理,演示直接调用与函数封装两种调用方式,并讲解如何在C++中定义属性及在JS中读写BSTR类型属性值。

文章目录

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文件,并输入以下内容:

JavaScript调用COM组件的方法


<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,如下所示:

COM组件属性的定义与调用


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

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章