unit Main_U;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OBThread, jpeg, StdCtrls, ExtCtrls,IDCardClass_U,Unit1;type
  TIDCardRead_F = class(TForm)
    img_Cover: TImage;
    obthrd_ReadID: TOBThread;
    lbl_Info: TLabel;
    lbl_Con: TLabel;
    BtnGlyph_Read: TImage;
    BtnGlyph_UnRead: TImage;
    ID_Addr: TLabel;
    ID_Birth: TLabel;
    ID_Depart: TLabel;
    ID_ID: TLabel;
    ID_Name: TLabel;
    ID_Nation: TLabel;
    ID_NewAddr: TLabel;
    ID_Sex: TLabel;
    ID_Time: TLabel;
    Image_XP: TImage;
    ImageClose: TImage;
    ImageMin: TImage;
    edt1: TEdit;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure ImageCloseClick(Sender: TObject);
    procedure obthrd_ReadIDExecute(Sender: TObject; params: Pointer);
    procedure BtnGlyph_ReadClick(Sender: TObject);
    procedure BtnGlyph_UnReadClick(Sender: TObject);
    procedure ImageMinClick(Sender: TObject);
    procedure img_CoverMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    UsbOrCom: string;
    Port,pucSn,puiCHMsgLen,puiPHMsgLen: integer;
    StartReadID,PortEnable: Boolean;
    IDCard: TIDCard;
    procedure ReadIDCard();//读身份证
    { Private declarations }
  public
    { Public declarations }
  end;var
  IDCardRead_F: TIDCardRead_F;implementation
uses IDCardDll_U ;
{$R *.dfm}procedure TIDCardRead_F.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  IDCard.Destroy;
  StartReadID:= False;
  if PortEnable then
    SDT_ClosePort(Port);
end;procedure TIDCardRead_F.FormCreate(Sender: TObject);
begin
  IDCard:= TIDCard.Create;
  PortEnable:= OpenUsbPort(Port);
  if PortEnable then
  begin
    UsbOrCom:= 'U';//连接的类型是通过Usb端口
    lbl_Con.Caption:= '连接类型:USB口连接';
    lbl_Con.Font.Color:= clGreen;
  end
  else begin
    PortEnable:= OPenComPort(Port);
    if PortEnable then
    begin
      UsbOrCom:= 'C' ;   //连接的类型是通过Com端口
      lbl_Con.Caption:= '连接类型:串口连接';
      lbl_Con.Font.Color:= clGreen;
    end
    else begin
      UsbOrCom:='';
      lbl_Con.Caption:= '连接类型:端口错误导致未连接';
      lbl_Con.Font.Color:= clRed;
    end;
  end;
  if not PortEnable then
    BtnGlyph_Read.Enabled:= False;
  StartReadID:= True;
  if (StartReadID) and (PortEnable) then
    BtnGlyph_ReadClick(nil);
end;procedure TIDCardRead_F.ImageCloseClick(Sender: TObject);
begin
  Close;
end;procedure TIDCardRead_F.ReadIDCard;
var
  iRet : integer;
begin  while (PortEnable) and (StartReadID) do
  begin
    Sleep(1000);
    iRet:= SDT_StartFindIDCard(Port, pucSn, 1); //查卡
    if iRet = 159 then
      iRet:= SDT_SelectIDCard(Port,pucSn,1) //选卡
    else Continue;
    if iRet= 144 then
    begin
      puiCHMsgLen:=0;
      puiPHMsgLen:=0;
      iRet:= SDT_ReadBaseMsgToFile(1001, 'wz.txt',puiCHMsgLen, 'zp.wlt',puiPHMsgLen,1); //存储文件
    end
    else Continue;
    if iRet =144 then
    begin
      UsbOrCom:='U';//连接的类型是通过Usb端口
      if UsbOrCom ='U' then
        iRet := GetBmp('zp.wlt',2)
      else if UsbOrCom='C' then //如果连接的类型是Com端口
        iRet := GetBmp('zp.wlt',1);      if iRet=1 then
      begin
        Image_XP.Picture.LoadFromFile('zp.bmp');
        IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'wz.txt');
        ID_Name.Caption:= IDCard.Name;
        ID_Sex.Caption:= IDCard.Sex_CName;
        ID_Nation.Caption:= IDCard.NATION_CName;
        ID_Birth.Caption:= IDCard.BIRTH;
        ID_Addr.Caption:= IDCard.ADDRESS;
        ID_ID.Caption:= IDCard.IDC;
        ID_Depart.Caption:= IDCard.REGORG;
        ID_Time.Caption:= IDCard.STARTDATE +'-'+IDCard.ENDDATE;
        DeleteFile('zp.bmp');
        DeleteFile('wz.txt');        if ID_ID.Caption='522121198804017412' then
        begin
          StartReadID:= False;
          form1.Show;
        end;      end
      else Continue;
    end;
  end;
end;procedure TIDCardRead_F.obthrd_ReadIDExecute(Sender: TObject;
  params: Pointer);
begin
  ReadIDCard ;
end;procedure TIDCardRead_F.BtnGlyph_ReadClick(Sender: TObject);
begin
  StartReadID:= True;
  BtnGlyph_Read.Visible:= False;
  BtnGlyph_UnRead.Visible:= True;
  obthrd_ReadID.Execute(nil);
end;procedure TIDCardRead_F.BtnGlyph_UnReadClick(Sender: TObject);
begin
  BtnGlyph_Read.Visible:= True;
  BtnGlyph_UnRead.Visible:= False;
  StartReadID:= False;end;procedure TIDCardRead_F.ImageMinClick(Sender: TObject);
begin
  IDCardRead_F.WindowState:= wsMinimized;
end;procedure TIDCardRead_F.img_CoverMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssleft in shift then
    Releasecapture;
  perform(WM_SYSCOMMAND,$F012,0);
end;end.
想知道在
    iRet:= SDT_ReadBaseMsgToFile(1001, 'wz.txt',puiCHMsgLen, 'zp.wlt',puiPHMsgLen,1); //存储文件
这句是上面意思。具体是干什么的。我在自己电脑使用好好的。但是移到别的电脑就出现问题了。只显示图片其他信息都不显示了。下面我附上其他类的代码。都是网上下载的
这是程序下载地址http://www.2ccc.com/article.asp?articleid=5998

解决方案 »

  1.   

    同样的代码。在别的电脑上面只读取图片出来。还在桌面创建两个文件
    一个是zp.bmp另外一个是wz.txt  到底是哪里出错了?谁能帮我看看。
      

  2.   

    买个读卡器,对应的会有SDK的
      

  3.   

    在iRet:= SDT_ReadBaseMsgToFile(),之后先中断,看看有没有生成wz.txt和zp.wlt
    我在自己电脑使用好好的。但是移到别的电脑就出现问题了
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    源代码IDCardDll_U中定义的Zsdtapi.dll接口,可能别人的Zsdtapi.dll文件与你电脑上的Zsdtapi.dll文件不是同一个,或者别人电脑中有多个Zsdtapi.dll文件,定义时指向了不对的Zsdtapi.dll文件
    建议在代码中IDCardDll_U.pas文件中指定dll文件的部分修改为指定位置(比如指定为当前exe文件所在目录dll下)implementation  function SDT_OpenPort; external 'Zsdtapi.dll';
      function SDT_ClosePort; external 'Zsdtapi.dll';
      ....
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    implementation  function SDT_OpenPort; external '.\dll\Zsdtapi.dll';
      function SDT_ClosePort; external '.\dll\Zsdtapi.dll';
      ....
      

  4.   

    文件时生成了。但是是生成在桌面。
    iRet:= SDT_ReadBaseMsgToFile(1001, 'wz.txt',puiCHMsgLen, 'zp.wlt',puiPHMsgLen,1); //存储文件Image_XP.Picture.LoadFromFile('zp.bmp');
    IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'wz.txt');
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    那你可以在SDT_ReadBaseMsgToFile时,把路径写到里面比如(放在C:\aa\)
    iRet:= SDT_ReadBaseMsgToFile(1001, 'c:\aa\wz.txt',puiCHMsgLen, 'c:\aa\zp.wlt',puiPHMsgLen,1); //存储文件Image_XP.Picture.LoadFromFile('c:\aa\zp.bmp');
    IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'c:\aa\wz.txt');你前面说的只有图片没有文字信息,因为SDT_ReadBaseMsgToFile之后,把文字信息放在了wz.txt文件中,而后面的
    IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'wz.txt')是在当前目录下去找wz.txt文件(这时你的wz.txt文件在桌面),自然找不到wz.txt文件所有你最好指定路径
      

  5.   

    意思是说,在上面存放地址时,应该把文件存放在程序下。就是APPLECATION.EXENAME下?指定路径去是吗?
      

  6.   


      while (PortEnable) and (StartReadID) do
      begin
        Sleep(1000);
        iRet:= SDT_StartFindIDCard(Port, pucSn, 1); //查卡
        if iRet = 159 then
          iRet:= SDT_SelectIDCard(Port,pucSn,1) //选卡
        else Continue;
        if iRet= 144 then
        begin
          puiCHMsgLen:=0;
          puiPHMsgLen:=0;
          iRet:= SDT_ReadBaseMsgToFile(1001, 'C:\wz.txt',puiCHMsgLen, 'C:\zp.wlt',puiPHMsgLen,1); //存储文件
        end
        else Continue;
        if iRet =144 then
        begin
          UsbOrCom:='U';//连接的类型是通过Usb端口
          if UsbOrCom ='U' then
            iRet := GetBmp('C:\zp.wlt',2)
          else if UsbOrCom='C' then //如果连接的类型是Com端口
            iRet := GetBmp('C:\zp.wlt',1);      if iRet=1 then
          begin
            img_XP.Picture.LoadFromFile('C:\zp.bmp');
            IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'C:\wz.txt');
            lblID_Name.Caption:= IDCard.Name;
            lblID_Sex.Caption:= IDCard.Sex_CName;
            lblID_Nation.Caption:= IDCard.NATION_CName;
            lblID_Birth.Caption:= IDCard.BIRTH;
            lblID_Addr.Caption:= IDCard.ADDRESS;
            lblID_ID.Caption:= IDCard.IDC;
            lblID_Depart.Caption:= IDCard.REGORG;
            lblID_Time.Caption:= IDCard.STARTDATE +'-'+IDCard.ENDDATE;
            DeleteFile('C:\zp.bmp');
            DeleteFile('C:\wz.txt');
          end
          else Continue;
        end;
      end;