JS调用ATL DLL

 

实现目标:JavaScript调用ActiveX DLL

一.     创建ActiveX控件。

Visual C++提供了2个途径开发ActiveX控件:MFCATL

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 NameCallDll,剩余的系统会自动补填:

然后选择Tab选项卡Attributes标签页,

最后确定即可。

4.接下来就是完善接口和类的实现了。首先给接口添加一个属性,用来获取值。随后新建一个方法,负责进行一些计算,并把结果赋给该属性。选中接口ICallDll打开右键,看到如下所示

添加属性(Add Property),设置类型和名称:

编译器生成相应的代码:

添加方法,设置方法名与形参:

编译器生成代码:

5.在工作区打开类CCallDll代码部分,添加如下代码:

然后切换到FileView工作区,在CallDll.cpp文件写入我们的实现代码,如下图(这里实现的是加载一个非MFCDll,并调用该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;//显示结果

    浏览网页,显示:

 

 

posted on 2009-12-22 16:29  月漩涡  阅读(5057)  评论(2编辑  收藏  举报