用ATL写简单的ActiveX控件 .
所以只能把读卡器的驱动封装成一个无界面的ActiveX控件,这样web页面中的js代码才能访问读卡器
其实做起来也挺简单的,我用的环境是VS2005,步骤如下:
打开VS2005后:
1、创建一个ATL Project。

Server-Type:Dynamic-Link Library (dll)
Additional-Options: Allow merging of proxy/stub code
这里说一句,对于所有只用于web的activex控件,不管有没有界面,都应该用这两个选项。

2。选择菜单“Project->Add Class..”,创建控件类。因为这里要建的是无界面的ActiveX控件,所以选择
使用的Class Template为“ATL Simple Object”。之后填写类名,这里假设为“MyActiveX”。之后的Option选择为:
Threading Model: single (对于所有只用于web的ActiveX控件来说,这个选项够了)
Interface: Dual
Aggregration: none (我这个类不需要别的COM组件聚合,所以none足够了)
如果需要增加事件支持(类似于DOM中的Event)的话,还应该把Connection Points选上。我这里不需要这个,所以就不选了。
最后点击“finish”按钮完成创建。

3。增加method和property定义。
菜单项即可自动生成method或者property定义。然后直接写实现代码即可。
注意:最好先搞清楚in/out/retval等参数类型以及BSTR/VARIANT等变量类型的作用和使用方法后再开始写代码。否则很容易出现各种问题。

然后写测试html页:
- <html>
- <body>
- <script type="text/javascript" >
- function doTest() {
- var ret=test.myTestMethod();
- alert(ret);
- }
- </script>
- <object id="test" classid="clsid:21EB133E-EF6C-451B-94AA-EB74C3B2ED12" >
- </object>
- <button onclick="doTest();">lala</button>
- </body>
<html>
<body>
<script type="text/javascript" >
function doTest() {
var ret=test.myTestMethod();
alert(ret);
}
</script>
<object id="test" classid="clsid:21EB133E-EF6C-451B-94AA-EB74C3B2ED12" >
</object>
<button onclick="doTest();">lala</button>
</body>
注意:页面里面定义object时需要一个classid。这个classid可以从工程中的"工程名.idl"文件中得到。
文件最下面会有这样一段:
- library MyActiveXProjectLib
- {
- importlib("stdole2.tlb");
- [
- uuid(21EB133E-EF6C-451B-94AA-EB74C3B2ED12),
- helpstring("MyActiveX Class")
- ]
- coclass CMyActiveX
- {
- [default] interface IMyActiveX;
- };
- };
library MyActiveXProjectLib
{
importlib("stdole2.tlb");
[
uuid(21EB133E-EF6C-451B-94AA-EB74C3B2ED12),
helpstring("MyActiveX Class")
]
coclass CMyActiveX
{
[default] interface IMyActiveX;
};
};
5。测试完毕之后就是打包了。
- [version]
- signature="$CHINA$"
- AdvancedINF=2.0
- [Add.Code]
- atl71.dll = atl71.dll
- CardReader.dll = CardReader.dll
- [atl71.dll]
- file-win32-x86=thiscab
- FileVersion=7,10,3077,0
- DestDir=11
- RegisterServer=yes
- [CardReader.dll]
- file-win32-x86=thiscab
- clsid={21EB133E-EF6C-451B-94AA-EB74C3B2ED12}
- FileVersion=1,0,0,1
- RegisterServer=yes
[version]
signature="$CHINA$"
AdvancedINF=2.0 [Add.Code]
atl71.dll = atl71.dll
CardReader.dll = CardReader.dll [atl71.dll]
file-win32-x86=thiscab
FileVersion=7,10,3077,0
DestDir=11
RegisterServer=yes [CardReader.dll]
file-win32-x86=thiscab
clsid={21EB133E-EF6C-451B-94AA-EB74C3B2ED12}
FileVersion=1,0,0,1
RegisterServer=yes
- cabacr -s 6144 N myactivex.cab atl71.dll CardReader.dll myactivex.inf
cabacr -s 6144 N myactivex.cab atl71.dll CardReader.dll myactivex.inf
最后在网页中加入下面的代码,就可以在没有注册此ActiveX控件的电脑上使用这个控件了。
- <object id="myactivex" classid="clsid:21EB133E-EF6C-451B-94AA-EB74C3B2ED12" codebase="http://url-to-my-server/myactivex.cab">
- </object>
用ATL写简单的ActiveX控件 .的更多相关文章
- 【VS开发】 自己编写一个简单的ActiveX控件——详尽教程
最近开始学ActiveX控件编程,上手不太容易,上网想找相关教程也没合适的,最后还是在师哥的指导下完成了第一个简单控件的开发,现在把开发过程贴出来与大家分享一下~ (环境说明--平台:vs2005:语 ...
- 最全的基于MFC的ActiveX控件开发教程
浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...
- 用ATL和MFC来创建ActiveX控件
摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所 ...
- Win32编程点滴3 - 简单ActiveX控件的使用
虽然这里一片的.net气氛,到处充斥着像MVC.WPF.WorkFlow.LINQ等各种niubility的术语.但我们使用的Windows还是由COM技术主宰着:我们在选择日常使用的软件时,也会避免 ...
- 如何用ATL创建ActiveX控件
演示截图: 代码简介或代码解析: 如何用ATL创建ActiveX控件 实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部 ...
- 调用ocx ActiveX控件详解(做一个简单的ocx控件)
背景 最近做的项目都和插件有关,就是在页面中调用插件的方法,然后进行操作. 插件就是ocx ActiveX控件,具体的说明可以自己去了解一下,在这里就不做赘述. 具体调用方式很简单: 1.在页面中写一 ...
- ATL开发 ActiveX控件的 inf文件模板
ATL开发 ActiveX控件的 inf文件模板
- ActiveX控件(ATL篇)
目录 第1章 VC++6.0创建 2 1.1 目标 2 1.2 创建项目 2 1.3 增加COM类 4 1.4 属性 7 1.5 事件 8 1.6 实现连接点 ...
- ATL控件签名之后页面还提示“在此页面上的Activex控件和本页上的其他部分及交互可能不安全”
ATL控件正常签名打包,然后安装之后还是会提示: 没理由啊,签名是花钱搞得正当的签名.后来查了资料才知道这还不够,需要在创建ATL控件的时候继承一个IObjectSafetyImpl 类 知道了原因, ...
随机推荐
- 【转】Nginx+Tomcat搭建高性能负载均衡集群
最近对负载均衡比较感兴趣,研究了公司的负载均衡的配置,用的是阿里的SLB,相当于不用运维,只需要在后台进行简单的配置就能完成Tomcat的负载均衡,索性在网上找了几篇文章去尝试搭建一个集群,然而很多都 ...
- win7 64下安装mysql-python报错的解决办法
最近要使用django进行项目开发,需要使用mysql-python模块. 在本地搭建环境安装的时候却出现报错,Unable to find vcvarsall.bat 在网上找了很多资料,发现是w ...
- c# 流程控制
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- mysql存储过程详解[转]
1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 ...
- js基本框架
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
Dijkstra算法 ———————————最后更新时间:2011.9.25———————————Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径. ...
- 关于map
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对, ...
- python手记(41)
python opencv图片融合 #!/usr/bin/env python #-*- coding: utf-8 -*- #code:myhaspl@qq.com import cv2 impor ...
- LNK 2005 error 函数定义也是定义!!
url=Ccne-rWwUO9tJp5YAPcycUw09__2whgZLpLw2aWVuYuE-fhu46kaVNX4BldWlsxig1tDML47aO_ctD3PcUlGjK"> ...
- Windows 下统计行数的命令
大家都知道在Linux下统计文本行数能够用wc -l 命令.比如: -bash-3.2$ cat pif_install.log | wc -l 712 但在Windows下怎样统计输出文 ...