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