您的位置:首页 > Web前端 > JavaScript

JS调用ATL DLL 以及 去掉ActiveX 控件安全提示

2010-03-04 17:52 561 查看
实现目标: 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;//显示结果
浏览网页,显示:





标记控件为安全的 是实现IObjectSafety

具体做法 :atl com app wizard 工程增标记安全控件

1. 在你dll控件的接口实现类的 .h 中继承类列表的末尾,并在上一行中添加一个逗号;
public IObjectSafetyImpl<"类名", INTERFACESAFE_FOR_UNTRUSTED_CALLER>
2. 将下行添加到 .h 中的 COM 映射:
COM_INTERFACE_ENTRY(IObjectSafety) 即可
3. 如果IObjectSafetyImpl 未定义 , 则包含Atlctl.h
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: