最近刚用delphi实行了一个ic卡的读写,需要将读方法封装成activex给js调用,今天弄了一下,有几个要点记录一下。
1、automation object 中实现一个方法,只能返回HRESULT,也就是说只能实现procedure,我想用传出参数的方式来实现读出的数据,但是js里面一直提示“不支持方法和属性”的错误。后来想了个办法,在接口里面实现一个读方法,同时实现一个属性,在读方法里面将读到的值赋给属性,然后js再调用属性得到。
2、setup.inf及html里面的clsid:setup.inf中随便用,在html中的object应该用到delphi中Class***对应的guid,例如在***TLB.pas文件中:
LIBID_hxcardactive: TGUID = '{05CC7E64-2ACA-4B74-9FDA-2F46C2A87826}';
IID_Ihxcard: TGUID = '{03DD21A9-7B79-48CF-ABEE-A677AC4CB3B7}';
CLASS_hxcard: TGUID = '{CFE20654-45F3-4260-B71E-219E1E6FEAA9}';
html中应该用最后一个CFE20654-45F3-4260-B71E-219E1E6FEAA9。
3、active签名问题:由于现在的ie对安全都加强了,未签名过的activex直接就不能使用,所以在开发阶段需要实现一个本地签名环境,所以从http://files.cnblogs.com/babyt/SignTool.rar下载了一个工具,具体做法如下:
1.) makecert -n "CN=TempRoot" -r -sv TempRoot.pvk TempRoot.cer
得到一个自认证证书TempRoot.cert,其密钥文件为TempRoot.pvk
2.) makecert -sk TempCA -iv TempRoot.pvk -n "CN=TempCA" -ic TempRoot.cer TempCA.cer -sr currentuser -ss My
得到一个由刚才TempRoot所颁发的子证书TempCA,且被保存到"个人"证书库中
3.) certmgr
打开证书管理器,可看到"个人"里已经含有TempCA,点击标签页"可信任的根证书机构",点击"导入",将TempRoot.cert导入,这样一来TempCA的证书链就是完整且可信任的了。
4. ) signtool 根据界面提示对cab文件进行签名。(cab用iexpress生成)
4、本地文件测试之后,一般会在本地web服务器上进行测试,需要在ie中将域名加入可信列表,否则还是会出现权限问题。
5、ie上提示“控件和本页上的其它部份的交互可能不安全”的问题,需要在代码中实现IObjectSafety接口,例子如下(照样画葫芦既可):
type
TUpdaterX = class(TAutoObject,IObjectSafety, IUpdaterX)
private
FObjectSafetyFlags: DWORD;
protected
procedure Start; safecall;
{ IObjectSafety }
function GetInterfaceSafetyOptions(const IID: TIID; pdwSupportedOptions,
pdwEnabledOptions: PDWORD): HResult; virtual; stdcall;
function SetInterfaceSafetyOptions(const IID: TIID; dwOptionSetMask,
dwEnabledOptions: DWORD): HResult; virtual; stdcall;
end;
implementation
uses ComServ, Main;
function TUpdaterX.GetInterfaceSafetyOptions(const IID: TIID;
pdwSupportedOptions, pdwEnabledOptions: PDWORD): HResult;
var
Unk: IUnknown;
begin
if (pdwSupportedOptions = nil) or (pdwEnabledOptions = nil) then
begin
Result := E_POINTER;
Exit;
end;
Result := QueryInterface(IID, Unk);
if Result = S_OK then
begin
pdwSupportedOptions^ := INTERFACESAFE_FOR_UNTRUSTED_CALLER or
INTERFACESAFE_FOR_UNTRUSTED_DATA;
pdwEnabledOptions^ := FObjectSafetyFlags and
(INTERFACESAFE_FOR_UNTRUSTED_CALLER or INTERFACESAFE_FOR_UNTRUSTED_DATA);
end
else begin
pdwSupportedOptions^ := 0;
pdwEnabledOptions^ := 0;
end;
end;
function TUpdaterX.SetInterfaceSafetyOptions(const IID: TIID; dwOptionSetMask,
dwEnabledOptions: DWORD): HResult;
var
Unk: IUnknown;
begin
Result := QueryInterface(IID, Unk);
if Result <> S_OK then Exit;
FObjectSafetyFlags := dwEnabledOptions and dwOptionSetMask;
end;
分享到:
相关推荐
读卡器 读卡 ActiveX控件开发,OCX,CAB列子
websocket实现实时指令交互,web调用IC卡读卡器开发,通过纯js调用读卡器获取实时数据,html+css+js开发web前端,通过websoket通讯实现与读卡器等硬件设备的信息交互。
由于读写器的电路板、单片机程序、USB接口驱动程序及函数全部由公司自主开发,所以我们能够把复杂的IC卡认证读写器过程集成转化为更简单的函数调用操作,即使是从未接触过一卡通开发的软件开发人员,写起程序来也...
NI调用IC卡读卡器的DLL,既支持64位程序也支持32位程序, 调用也非常方便,下面将介绍JNI调用IC卡读卡器DLL的方式
IC卡调用函数
IC卡dll封装成ocx供网页调用,供有需要的人参考。
PB如何调用IC卡读卡器函数,如何实现接口程序的对接,为此,提供了PB调用IC卡读卡器程序的例子代码,方便大家参考!如有需要进行交流,可以给我留言或者加我q80760223进行探讨
关于c#下ActiveX控件的制作,及给cab加上数字签名,以便在B/S下客户端调用控件,这是本人根据项目需要写的,很详细,参考了很多的网上资源,并将参考的资源也一并打包。希望对下载了的朋友有所帮助。里面还有一个读...
配合读卡器实现读写接触式IC卡数据 CardTool是一个实用程序,允许您从智能卡读卡器向符合ISO7816标准的智能卡和/或选定的存储卡发送命令。它是专门为ACS的ACOS MCU智能卡和ACS读卡器设计的。支持PC/SC兼容的ACR38、...
IC封装大全IC封装大全IC封装大全IC封装大全IC封装大全
ic卡读卡demo,包含了读卡的代码,以及读卡需要安装的控件
IC卡读卡器动态库及调用说明仅供参考,求资源分
ic卡读写程序源码ic卡读写程序源码
IC卡读写器动态库及调用说明 IC卡读写器动态库 IC卡读写器,IC卡读卡器动态库使用说明
配合读卡器可以读写接触式IC卡数据, 配合读卡器可以读写接触式IC卡数据
易语言USB读IC卡源码,代码并不难,主要是易语言DLL命令是自已写的。程序包含明华读卡器demo和开发文档。真正易语言可用。测试硬件:型号URF-35H-MEM,想学习易语言操做IC卡的朋友可以下载参照下。
用M1卡扇区读写,适用指定读写器,厂家是方卡的SF-2B。
界面采用C#写的,兼容多种读卡器,指令采用JS脚本,包含读社保卡指令
读IC卡返回及分析实例,详细步骤!卡激活 3B6D00005A434A454D5650424F43322E30 发送:00A404000E315041592E5359532E444446303100 接收:6F1A840E315041592E5359532E4444463031A5088801015F2D027A689000
IC卡读卡软件源码