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;//显示结果
浏览网页,显示:
1. 在你dll控件的接口实现类的 .h 中继承类列表的末尾,并在上一行中添加一个逗号;
public IObjectSafetyImpl<"类名", INTERFACESAFE_FOR_UNTRUSTED_CALLER>
2. 将下行添加到 .h 中的 COM 映射:
COM_INTERFACE_ENTRY(IObjectSafety) 即可
3. 如果IObjectSafetyImpl 未定义 , 则包含Atlctl.h
一. 创建 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
相关文章推荐
- 补充 ActiveX打包后在JS中调用时不提示安全问题
- Win7/Win8中注册控件失败,提示“DllRegisterServer的调用失败,错误代码为0x******** ” 问题的解决办法
- office 2003 ActiveX 控件安全提示
- Ajax 控件 的使用 以及js调用后台方法【自己总结一下】
- Java调用ocx控件以及dll
- 将Capicom调用代码封装到ActiveX——解决javascript调Capicom读取数字证书信息时,IE弹出安全提示的问题
- win7/win8 64位系统注册TeeChart8.ocx 控件---以及dllregisterserver调用失败问题解决办法
- js调用DLL——ATL的方式
- 关于chrome上的网银安全控件开发技术(chrome 调用本地dll)
- win8.1 下activex编程遇到的问题之 “控件已加载 但对DllRegisterServer的调用失败”
- ATL编写的控件中动态调用加载dll文件,并调用函数
- Active 控件调用DLL,因为安全透明性问题无法运行
- Java调用ocx控件以及dll和word文档
- vs2010开发activex(MFC)控件/ie插件(三),js调用ocx控件的接口函数
- ATL开发的activex要放上网能调用方法要先实现安全接口
- MFC生成带控件的dll以及dll的调用
- VC6.0 MFC创建OCX入门-详细完整流程(JS调用测试, 去除安全提示, exe打包)
- js调用.net后台事件,和后台调用前台等方法以及js调用服务器控件的方法
- win7/win8 64位系统注册TeeChart8.ocx 控件---以及dllregisterserver调用失败问题解决办法
- ATL 控件 网页上的 安全提示