JS+OCX实现网页与IC卡读卡器通讯(一)

很早之前就想把ocx的制作过程记录成博客供大家探讨,刚好今天有个项目需要制作一个ocx供同事的页面调用,就顺便记录一下过程。
项目需求:B/S系统下实现页面与M1卡刷卡器通讯(刷卡查询)。
设计思路:制作ocx调用刷卡器的接口动态库(dcrf32.dll),然后将ocx打包成cab,嵌到网页中,通过javascript与ocx交互。
开发环境:D2007
设计步骤:
1、制作ocx
进入D2007菜单:File->New->Other->ActiveX->Activex Library,生成一个空的dll工程文件:

library Project1;
uses
  ComServ;
exports
  DllGetClassObject,
  DllCanUnloadNow,
  DllRegisterServer,
  DllUnregisterServer;
{$R *.RES}
begin
end.

再次进入菜单File->New->Other->ActiveX->Active Form,此时会弹出对话框:

这里根据实际情况命名即可。
接下来会自动弹出Type Library页面(或自己点View->Type Library):

接下来,因为读卡器的所有操作都封装在接口动态库里,因此,需要用ocx调用dll中的方法,我这里新建了一个单元 unt_cardfunc.pas,并在此单元里定义了所需要的方法,和exe调用dll方法一样:

//...省略
 Function dc_init(prot:integer;baud:longint):longint; stdcall;
  far;external 'DCRF32.dll' name 'dc_init';
 Function dc_exit(icdev:longint):smallint; stdcall;
  far;external 'DCRF32.dll' name 'dc_exit' ;
 Function dc_card(icdev:longint;mode:smallint;var snr:longword):smallint; stdcall;
  far;external 'DCRF32.dll' name 'dc_card';
//...省略

然后在Type Library的IActiveXFormX接口(对照前面自己的命名)下新增method:

例如图中添加的dc_init方法,这里需要注意的是:如果需要添加带返回值的method(function),最后一个参数一定要是result,并且type需要选择指针类型(如long*)、modifier需要勾选out和retval。
设置好之后,点击刷新按钮,保存,可以看到在ActiveFormImpl单元生成了相应的方法,我们需要做的就是把方法完善即可:

function TActiveFormX.dc_init(port, baud: Integer): Integer;
begin
  Result := unt_cardfunc.dc_init(port,baud);//调用unt_cardfunc单元的同名函数
end;

同理,其他函数、变量、事件(IActiveFormXEvents下添加),都是同样的方式,如,添加一个变量,ActiveFormImpl单元也会生成相应的GET_和SET_方法,如下填充就可:

function TActiveFormX.Get_icdev: Integer;
begin
  Result := unt_cardfunc.icdev;
end;

procedure TActiveFormX.Set_icdev(Value: Integer);
begin
  unt_cardfunc.icdev := Value;
end;

所有功能实现以后,编译工程,即可在项目目录中生成ocx文件。
当然,这只是第一步,请关注下节博文。

转载请注明:梧桐树下 » JS+OCX实现网页与IC卡读卡器通讯(一)

与本文相关文章

发表我的评论

取消评论
表情 插代码

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项

网友评论2

  1. I like reading http://www.pfeng.org and I conceive this website got some truly useful stuff on it!

    Dubai escort service2012-07-05 14:17 回复
  2. I just book marked your blog http://www.pfeng.org on Digg and Stumble Upon. I enjoy reading your commentaries.