实现目标:JavaScript调用ActiveX DLL
一. 创建ActiveX控件。
Visual C++提供了2个途径开发ActiveX控件:MFC和ATL。
用MFC开发ActiveX控件比较容易,不必关心控件接口的细节,只要把注意力集中在控件本身的功能上,但是生成的控件比较大,而且客户端如果要运行ActiveX控件,必须要具有相应版本MFC类库的DLL。使用ATL不涉及MFC类库,生成的控件相对较小。
这里使用ATL的方式。
1. 打开VS6.0,点击File|New,打开如下对话框:
2. 在Project name处命名为atlDemo然后点击OK,接受项目设置,接下来看到如下对话框:
然后Finish——OK。此时已经创建了一个空的COM DLL。
3. 选择菜单Insert|New ATL Object,新建一个ATL Object,如下
4.根据向导进入如下界面,填写Short Name:CallDll,剩余的系统会自动补填:
然后选择Tab选项卡Attributes标签页,
最后确定即可。
4.接下来就是完善接口和类的实现了。首先给接口添加一个属性,用来获取值。随后新建一个方法,负责进行一些计算,并把结果赋给该属性。选中接口ICallDll打开右键,看到如下所示
添加属性(Add Property),设置类型和名称:
编译器生成相应的代码:
添加方法,设置方法名与形参:
编译器生成代码:
5.在工作区打开类CCallDll代码部分,添加如下代码:
然后切换到FileView工作区,在CallDll.cpp文件写入我们的实现代码,如下图(这里实现的是加载一个非MFC的Dll,并调用该Dll里的一个GetRegResult方法,将返回结果赋给现有类的属性chResult)
因为用到了类型转换函数_com_util::ConvertBSTRToString,所以头文件处需要加入#include <comdef.h>。然后编译,完成后,拷贝生成的DLL至系统system32目录下,注册后就可使用。
二. JS调用代码。
var atlCom=new ActiveXObject("AtlDemo.CallDll");//创建com对象
atlCom.CalculateRegCode(document.getElementById("basePwd").value,document.getElementById("count").value);//调用com方法
document.getElementById("regResult").innerHTML=atlCom.GetResult;//显示结果
浏览网页,显示:
![](https://i-blog.csdnimg.cn/blog_migrate/db91377a145658ac4d50be6d91e81767.jpeg)