`
wolf_cyj
  • 浏览: 13021 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

把ic卡的读方法封装成activex控件给js调用

阅读更多
最近刚用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

    在这个案例中,读卡器读卡的ActiveX控件可能包括启动读卡、停止读卡、获取读到的卡片信息等方法。 2. **OCX文件**: OCX(Object Linking and Embedding, Control eXtension)是ActiveX控件的一种老式格式。OCX...

    VC++6.0写ActiveX控件,和WEB通信的一些心得

    在近期的项目中,我们使用Visual C++ 6.0开发了一个ActiveX控件,该控件用于封装对加密狗以及明华非接触式IC卡读写器的操作,并在Web端进行应用。开发过程中遇到并解决了一些问题,本文旨在分享这些经验,希望对遇到...

    IC卡读卡社保工具 兼容多种读卡器 JS脚本

    标题中的“IC卡读卡社保工具 兼容多种读卡器 JS脚本”指的是一个用于读取IC(集成电路)卡中社保信息的软件工具。这个工具的独特之处在于它使用JavaScript(JS)脚本来处理读卡指令,同时具备与多种不同类型的读卡器...

    IC卡读卡器dll封装成ocx

    在本案例中,"IC卡读卡器dll封装成ocx"意味着开发者将专门处理IC卡读取功能的DLL库转换为一个OCX控件。这样做有几个主要目的: 1. **增强易用性**:OCX控件可以直接在Visual Basic、VBScript、VBA等环境中拖放使用...

    ActiveX控件.zip

    在本例中,"ActiveX控件.zip" 文件包含了一个IC读卡器的Web端演示(demo),这通常意味着它允许用户通过网页与IC读卡器进行交互,例如读取卡片上的数据。 IC读卡器是一种硬件设备,能够读取和写入集成电路...

    web调用IC卡读卡器开发,通过纯js调用读卡器获取实时数据

    websocket实现实时指令交互,web调用IC卡读卡器开发,通过纯js调用读卡器获取实时数据,html+css+js开发web前端,通过websoket通讯实现与读卡器等硬件设备的信息交互。

    不弹出警告的ActiveX控件的源代码

    `ICCard`这个文件名可能是示例中使用的特定控件实例,可能代表一种智能卡读卡器的ActiveX控件,用于在网页中读取IC卡中的数据。在实际应用中,这样的控件可能会用于在线身份验证或数据传输等场景。 了解并掌握...

    PB调用IC卡读卡器程序例子代码

    标题中的“PB调用IC卡读卡器程序例子代码”是指使用PowerBuilder(PB)这一编程工具来与IC卡读卡器进行交互的示例代码。在IT领域,这种交互通常涉及到通过API(应用程序编程接口)调用来实现硬件设备如IC卡读卡器的...

    ic卡读卡demo

    本篇文章将围绕"ic卡读卡demo"这一主题,深入探讨IC卡读卡的技术原理、实现方法以及相关的编程代码。 IC卡读卡器是连接IC卡与电脑或其它设备的桥梁,其工作原理是通过非接触式或接触式的方式,读取卡片内部的集成...

    网络web调用IC卡读写器demo范例及源码

    由于读写器的电路板、单片机程序、USB接口驱动程序及函数全部由公司自主开发,所以我们能够把复杂的IC卡认证读写器过程集成转化为更简单的函数调用操作,即使是从未接触过一卡通开发的软件开发人员,写起程序来也...

    Java JNI调用IC卡读卡器

    在这个场景中,我们需要通过JNI来调用IC卡读卡器的DLL(动态链接库),该DLL可能是由非Java语言编写的,以实现与IC卡的通信。 首先,我们需要理解DLL的作用。DLL文件是Windows操作系统中的一个可执行文件,其中包含...

    IC卡调用函数

    IC卡调用函数

    基于ActiveX控件及多线程的串行通信

    ### 基于ActiveX控件及多线程的串行通信 #### 1. 引言 在现代工业控制领域,特别是在微机控制系统中,串行通信是一种极为常见的通信方式,它允许设备通过简单的接口进行数据交换。随着技术的发展,软件开发人员...

    Vs08 IC卡ActiveX源码

    【标题】"Vs08 IC卡ActiveX源码"指的是基于Visual Studio 2008(简称Vs2008)开发的一个针对IC卡的ActiveX控件源代码。ActiveX是微软推出的一种技术,主要用于在Windows环境中创建可重用的组件,它可以嵌入到网页、...

    IC卡读卡器动态库及调用说明

    IC卡读卡器动态库及调用说明是一个关键的主题,涉及到智能卡技术在信息技术领域的应用。智能卡,或称为IC卡,广泛用于身份验证、数据安全、电子支付等多个场景。动态库是这些功能得以实现的核心组件,它们包含了执行...

    ic卡读写程序源码

    IC卡读写程序源码是用于与智能IC卡交互的软件开发资源,它包含了实现IC卡数据读取、写入、管理等功能的代码。在IT领域,这种程序通常基于特定的通信协议,如ISO 7816或PICC(Proximity Coupling Device)标准,用于...

    ICCard,ocx控件

    ICCard 是一款基于 OCX(ActiveX Control)技术的控件,主要用于处理智能卡,特别是IC卡相关的操作。OCX控件是微软在Windows平台上推出的一种组件化开发工具,它允许开发者创建可重用的软件组件,这些组件可以被嵌入...

    CardTool 接触式ic卡读卡软件

    配合读卡器实现读写接触式IC卡数据 CardTool是一个实用程序,允许您从智能卡读卡器向符合ISO7816标准的智能卡和/或选定的存储卡发送命令。它是专门为ACS的ACOS MCU智能卡和ACS读卡器设计的。支持PC/SC兼容的ACR38、...

    C#ActiveX控件制作及数字签名的处理

    关于c#下ActiveX控件的制作,及给cab加上数字签名,以便在B/S下客户端调用控件,这是本人根据项目需要写的,很详细,参考了很多的网上资源,并将参考的资源也一并打包。希望对下载了的朋友有所帮助。里面还有一个读...

    明华IC卡读程序

    在IT行业中,IC卡(Integrated Circuit ...总的来说,开发“明华IC卡读程序”需要深入理解C#编程、串行通信、智能卡协议、动态链接库调用以及安全编程等多个方面的知识,这些技能是构建可靠、高效的IC卡应用的基础。

Global site tag (gtag.js) - Google Analytics