#ifdef  _WIN32
#define STDCALL  __stdcall
#else
#define STDCALL
#endif
#ifndef SDTAPI_
#define SDTAPI_
#ifdef __cplusplus
extern "C"{
#endif #pragma pack(1)
typedef struct tagIDCardData{
char Name[32];
char Sex[4];
char Nation[6];
char Born[18];
char Address[72];
char IDCardNo[38];
char GrantDept[32];
char UserLifeBegin[18];
char UserLifeEnd[18];
char reserved[38];
char PhotoFileName[255];
}IDCardData;#pragma pack()/**********************************************************
 ********************** 端口类API *************************
 **********************************************************/
int STDCALL Syn_GetCOMBaud(int iComID,unsigned int *puiBaud);
int STDCALL Syn_SetCOMBaud(int iComID,unsigned int  uiCurrBaud,unsigned int  uiSetBaud);
int STDCALL Syn_OpenPort(int iPortID);
int STDCALL Syn_ClosePort(int iPortID);/**********************************************************
 ********************** SAM类API **************************
 **********************************************************/
int STDCALL Syn_GetSAMStatus(int iPortID,int iIfOpen);
int STDCALL Syn_ResetSAM(int iPortID,int iIfOpen);
int STDCALL Syn_GetSAMID(int iPortID,unsigned char *pucSAMID,int iIfOpen);
int STDCALL Syn_GetSAMIDToStr(int iPortID,char *pcSAMID,int iIfOpen);/**********************************************************
 ******************* 身份证卡类API ************************
 **********************************************************/
int STDCALL Syn_StartFindIDCard(int iPortID,unsigned char *pucManaInfo,int iIfOpen);
int STDCALL Syn_SelectIDCard(int iPortID,unsigned char *pucManaMsg,int iIfOpen);
int STDCALL Syn_ReadMsg(int iPortID,int iIfOpen,IDCardData *pIDCardData);/**********************************************************
 ******************* 附加类API ************************
 **********************************************************/
int  STDCALL Syn_SendSound(int iCmdNo);
void STDCALL Syn_DelPhotoFile();#ifdef __cplusplus
}
#endif 
#endif
请高手将以上翻译成DELPHI格式。分数我会加上,谢谢了。

解决方案 »

  1.   

    type  tagIDCardData = packed record
        Name: array[0..31] of AnsiChar;
        Sex: array[0..3] of AnsiChar;
        Nation: array[0..17] of AnsiChar;
        Address: array[0..71] of AnsiChar;
        IDCardNo: array[0..37] of AnsiChar;
        GrantDept: array[0..31] of AnsiChar;
        UserLifeBegin: array[0..17] of AnsiChar;
        UserLifeEnd: array[0..17] of AnsiChar;
        Reserved: array[0..37] of AnsiChar;
        PhotoFileName: array[0..254] of AnsiChar;
     end;
     IDCardData  = tagIDCardData;
     PIDCardData = ^IDCardData;const
      SDLLName = '';
    {**********************************************************
    ********************** 端口类API *************************
    **********************************************************}
    function Syn_GetCOMBaud(iComID: Integer; puiBaud: PUINT): Integer; stdcall; external SDLLName;
    function Syn_SetCOMBaud(iComID: Integer; uiCurrBaud, uiSetBaud: UINT): Integer; stdcall; external SDLLName;
    function Syn_OpenPort(iPortID: Integer): Integer; stdcall; external SDLLName;
    function Syn_ClosePort(iPortID: Integer): Integer; stdcall; external SDLLName;{**********************************************************
    ********************** SAM类API **************************
    **********************************************************}
    function Syn_GetSAMStatus(iPortID, iIfOpen: Integer): Integer; stdcall; external SDLLName;
    function Syn_ResetSAM(iPortID, iIfOpen: Integer): Integer; stdcall; external SDLLName;
    function Syn_GetSAMID(iPortID: Integer; pucSAMID: PByte; iIfOpen: Integer): Integer; stdcall; external SDLLName;
    function Syn_GetSAMIDToStr(iPortID: Integer; pcSAMID: PAnsiChar; iIfOpen: Integer): Integer; stdcall; external SDLLName;{**********************************************************
    ******************* 身份证卡类API ************************
    **********************************************************}
    function Syn_StartFindIDCard(iPortID: Integer; pucManaInfo: PByte; iIfOpen: Integer): Integer; stdcall; external SDLLName;
    function Syn_SelectIDCard(iPortID: Integer; pucManaMsg: PByte; iIfOpen: Integer): Integer; stdcall; external SDLLName;
    function Syn_ReadMsg(iPortID, iIfOpen: Integer; pIDCardData: PIDCardData): Integer; stdcall; external SDLLName;{**********************************************************
    ******************* 附加类API ************************
    **********************************************************}
    function Syn_SendSound(iCmdNo: Integer): Integer; stdcall; external SDLLName;
    procedure Syn_DelPhotoFile(); stdcall; external SDLLName;SDllName写你的DLL的名称
      

  2.   

    数据类型对了就行,再就是调用方式与压栈方式
    C++ Delphi Range   
      Char ShortInt -128   to   127   
      - Char 1   ASCII   character   (0   to   255)   
      Int,   Short SmallInt -32,768   to   32,767   
      Long Integer   /   LongInt -2,147,483,647   to   2,147,483,647   
      Unsigned   Char Byte 0   to   255   
      Unsigned   Int   /   Unsigned   Short Word 0   to   65,535   
      Unsigned   Long Cardinal   /   Longword 0   to   4,294,967,295   
      Float Single 3.4E-38   TO   3.4E+38   
      Double Double   /   Comp 1.7E-308   TO   1.7E+308   
      Long   Double Extended 3.4E-4932   TO   3.4E+4932   
      Void Pointer N/A   --   an   untyped   pointer   
      - Boolean True   or   False   
      String - a   C++   standard   object   
      - String An   array   of   up   to   255   ASCII   characters   
      char   FAR   * Pchar Pointer   to   a   null-terminated   string   
      unsigned   short   FAR   * PWORD Type   of   pointer   
      LPWSTR PWideChar Type   of   pointer   
      LPTSTR PAnsiChar Type   of   pointer   
        
        
      C/C++   Type ObjectPascal   Type   
      unsigned   short   [int] Word   
      [signed]   short   [int] SmallInt   
      unsigned   [int] Cardinal   {   3.25   fix   }   
      [signed]   int Integer   
      UINT LongInt   {   or   Cardinal   }   
      WORD Word   
      DWORD LongInt   {   or   Cardinal   }   
      unsigned   long LongInt   {   or   Cardinal   }   
      unsigned   long   int LongInt   {   or   Cardinal   }   
      [signed]   long LongInt   
      [signed]   long   int LongInt   
      char Char   
      signed   char ShortInt   
      unsigned   char Byte   
      char* PChar   
      LPSTR   or   PSTR PChar   
      LPWSTR   or   PWSTR PWideChar   {   3.12   fix   }   
      void* Pointer   
      BOOL Bool   
      float Single   
      double Double   
      long   double Extended   
        
      LP,NP,PP,P   prefix:   if   first   =   T   then   T   becomes   P   else   P   prefix   
        
      HANDLE THandle   
      FARPROC TFarProc   
      ATOM TAtom   
      TPOINT TPoint   
      TRECT TRect   
      COLORREF TColorRef   
      OFSTRUCT TOFStruct   
      DEBUGHOOKINFO TDebugHookInfo   
      BITMAP TBitMap   
      RGBTRIPLE TRGBTriple   
      RGBQUAD TRGBQuad   
      BITMAPCOREHEADER TBitmapCoreHeader   
      BITMAPINFOHEADER TBitmapInfoHeader   
      BITMAPINFO TBitmapInfo   
      BITMAPCOREINFO TBitmapCoreInfo   
      BITMAPFILEHEADER TBitmapFileHeader   
      HANDLETABLE THandleTable   
      METARECORD TMetaRecord   
      METAHEADER TMetaHeader   
      METAFILEPICT TMetaFilePict   
      TEXTMETRIC TTextMetric   
      NEWTEXTMETRIC TNewTextMetric   
      LOGBRUSH TLogBrush   
      LOGPEN TLogPen   
      PATTERN TPattern   {   TLogBrush   }   
      PALETTEENTRY TPaletteEntry   
      LOGPALETTE TLogPalette   
      LOGFONT TLogFont   
      ENUMLOGFONT TEnumLogFont   
      PANOSE TPanose   
      KERNINGPAIR TKerningPair   
      OUTLINETEXTMETRIC TOutlineTextMetric   
      FIXED TFixed   
      MAT2 TMat2   
      GLYPHMETRICS TGlyphMetrics   
      POINTFX TPointFX   
      TTPOLYCURVE TTTPolyCurve   
      TTPOLYGONHEADER TPolygonHeader   
      ABC TABC   
      RASTERIZER_STATUS TRasterizer_Status   
      MOUSEHOOKSTRUCT TMouseHookStruct   
      CBTACTIVATESTRUCT TCBTActivateStruct   
      HARDWAREHOOKSTRUCT THardwareHookStruct   
      EVENTMSG TEventMsg   
      WNDCLASS TWndClass   
      MSG TMsg   
      MINMAXINFO TMinMaxInfo   
      SEGINFO TSegInfo   
      ACCEL TAccel   
      PAINTSTRUCT TPaintStruct   
      CREATESTRUCT TCreateStruct   
      CBT_CREATEWND TCBT_CreateWnd   
      MEASUREITEMSTRUCT TMeasureItemStruct   
      DRAWITEMSTRUCT TDrawItemStruct   
      DELETEITEMSTRUCT TDeleteItemStruct   
      COMPAREITEMSTRUCT TCompareItemStruct   
      WINDOWPOS TWindowPos   
      WINDOWPLACEMENT TWindowPlacement   
      NCCALCSIZE_PARAMS TNCCalcSize_Params   
      SIZE TSize   
      MENUITEMTEMPLATEHEADER TMenuItemTemplateHeader   
      MENUITEMTEMPLATE TMenuItemTemplate   
      DCB TDCB   
      COMSTAT TComStat   
      MDICREATESTRUCT TMDICreateStruct   
      CLIENTCREATESTRUCT TClientCreateStruct   
      MULTIKEYHELP TMultiKeyHelp   
      HELPWININFO THelpWinInfo   
      CTLSTYLE TCtlStyle   
      CTLtype TCtltype   
      CTLINFO TCtlInfo   
      DDEADVISE TDDEAdvise   
      DDEDATA TDDEData   
      DDEPOKE TDDEPoke   
      DDEAACK TDDEAck   
      DEVMODE TDevMode   
      KANJISTRUCT TKanjiStruct   Delphi、C/C++、Visual   Basic数据类型的对照     
      ================================================================================     
      变量类型                           Delphi                                 C/C++                                       Visual   Basic     
      8位有符号整数                 ShortInt                             char                                         --     
      8位--符号整数                 Byte                                     BYTE,unsigned   short           Byte     
      16位有符号整数               SmallInt                             short                                       Short     
      16位--符号整数               Word                                     unsigned   short                     --     
      32位有符号整数               Integer,Longint               int,long                                 Integer   Long     
      32位--符号整数               Cardinal,LongWord           unsigned   long                       --     
      64位有符号整数               Int64                                   _int64                                     --     
      4字节浮点数                     Single                                 float                                       Single     
      6字节浮点数                     Real48                                 --                                             --     
      8字节浮点数                     Double                                 double                                     Double     
      10字节浮点数                   Extnded                               long   double                           --     
      64位货币值                       currency                             --                                             Currency     
      8字节日期/时间               TDateTime                           --                                             Date     
      16字节                               variantVariant,               VARIANT   Variant(注),         Variant(缺省)     
                                                OleVariant,TVarData       OleVariant(注)     
      1字节字符                         Char                                     char                                         --     
      2字节字符                         WideChar                             WCHAR                                       --     
      固定长度字节的字符串   ShortString                       --                                             --     
      动态字符串                       AnsiString                         AnsiString(注)                     String     
      以Null结束的字符串       PChar                                   char*                                       --     
      以Null结束的宽字符串   PWideChar                           LPCWSTR                                   --     
      动态2字节字符串             WideString                         WideString(注)                     --     
      1字节布尔值                     Boolean,ByteBool             (任何1字节数)                       --     
      2字节布尔值                     WordBool                             (任何2字节数)                       Boolean     
      4字节布尔值                     BOOL,LongBool                   BOOL                                         --     
      =======================================================================
      

  3.   

    调用  IntToStr(Syn_ReadMsg(1001,1,MyCard)) 时 报错.Access violation at address 7C84B5A7 in module 'kernel32.dll'. Write of address 00000020.怎么解决啊。
      

  4.   

    PIDCardData是指针你定义的MyCard分配空间了么
      

  5.   

    func 里面你要定义 mycard
     然后还要 fillchar(mycard,sizeof(mycard), 0);
    另外可以单独把 tagIDCardData 设置成 array[0..XX] of char   XX由结构的所有成员的长度决定,
    C 传结构进去 其实也是传的字符串  强制转换一下应该是可以的
      

  6.   

    我另外再加100分。共三百份,两百分我会在结贴子之前开另外的贴子加上。可以成功连上设备了。并且可以读出身份证里的相关信息了。包括相片等。但是,我读出来的信息除了 Name和bmp格式的相片之外,其他的都是乱码。哪位帮我看看。label中显示的信息都是乱码,除了Name之外。大家帮我看看啊。
    这是怎么回事呢。unit SFZ_U;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, ExtCtrls;type
      TSFZ_F = class(TForm)
        btnConnection: TBitBtn;
        btnReadCard: TBitBtn;
        lbl1: TLabel;
        lbl2: TLabel;
        lbl3: TLabel;
        lbl4: TLabel;
        lbl5: TLabel;
        lbl6: TLabel;
        lbl7: TLabel;
        lbl8: TLabel;
        lbl9: TLabel;
        lbl10: TLabel;
        img1: TImage;
        procedure FormCreate(Sender: TObject);
        procedure btnConnectionClick(Sender: TObject);
        procedure btnReadCardClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  //身份证信息
      tagIDCardData = packed record
        Name: array[0..31] of AnsiChar; 
        Sex: array[0..3] of AnsiChar;
        Nation: array[0..17] of AnsiChar;
        Born: array[0..18] of AnsiChar;
        Address: array[0..71] of AnsiChar; 
        IDCardNo: array[0..37] of AnsiChar; 
        GrantDept: array[0..31] of AnsiChar; 
        UserLifeBegin: array[0..17] of AnsiChar; 
        UserLifeEnd: array[0..17] of AnsiChar; 
        Reserved: array[0..37] of AnsiChar; 
        PhotoFileName: array[0..254] of AnsiChar;
      end;
      IDCardData  = tagIDCardData;
      PIDCardData = ^IDCardData;const 
      SDLLName = 'Syn_IDCardRead.dll'; var
      SFZ_F  : TSFZ_F;//动态库 函数 调用
    function Syn_OpenPort(iPortID:Integer): Integer; stdcall; external SDLLName;
    function Syn_ClosePort(iPortID:Integer): Integer; stdcall; external SDLLName;
    function Syn_StartFindIDCard(iPortID: Integer; pucManaInfo: PByte; iIfOpen: Integer): Integer; stdcall; external SDLLName;
    function Syn_SelectIDCard(iPortID: Integer; pucManaMsg: PByte; iIfOpen: Integer): Integer; stdcall; external SDLLName;
    function Syn_ReadMsg(iPortID:Integer;  iIfOpen:Integer;  pIDCardData:PIDCardData): Integer; stdcall; external SDLLName;function Syn_SendSound(iCmdNo: Integer): Integer; stdcall; external SDLLName;
    procedure Syn_DelPhotoFile(); stdcall; external SDLLName;implementation{$R *.dfm}procedure TSFZ_F.FormCreate(Sender: TObject);
    begin
      with SFZ_F do
      begin
        Top := ( Screen.Height - Height ) div 2;
        Left := ( Screen.Width - Width ) div 2;
      end;
    end;procedure TSFZ_F.btnConnectionClick(Sender: TObject);
    begin
      if Syn_OpenPort(1001) <>  0 then
      begin
        Application.MessageBox('连接身份证阅读器失败!' + #13#10 + '请检查设备是否正确插入USB接口中。', '失败', MB_OK + MB_ICONSTOP);
      end else
      begin
        Application.MessageBox('连接身份证阅读器成功!', '成功', MB_OK + MB_ICONINFORMATION);
      end;    
    end;//////////这是读身份证的事件//////////////////////////////////////////////////////////////////////
    procedure TSFZ_F.btnReadCardClick(Sender: TObject);
    var
      MyCardData:PIDCardData;
      pucIIN:array[0..3] of Byte;
      pucSN:array[0..7] of Byte;
    begin
      New(MycardData);  if  Syn_OpenPort(1001) <> 0 then
      begin
        Application.MessageBox('连接身份证阅读器失败!' + #13#10 + '请检查设备是否正确插入USB接口中。', '失败', MB_OK + MB_ICONSTOP);
        Exit;
      end;  if  Syn_StartFindIDCard(1001,@pucIIN, 0) = 0 then
      begin
        if  Syn_SelectIDCard(1001,@pucSN, 0) = 0 then
        begin
          if  Syn_ReadMsg(1001,0,MyCardData) = 0 then
          begin
            //ShowMessage('读到了');
            lbl1.Caption:=MyCardData.Name;
            lbl2.Caption:=MyCardData.Sex;
            lbl3.Caption:=MyCardData.Nation;
            lbl4.Caption:=MyCardData.Born;
            lbl5.Caption:=MyCardData.Address;
            lbl6.Caption:=MyCardData.IDCardNo;
            lbl7.Caption:=MyCardData.GrantDept;
            lbl8.Caption:=MyCardData.UserLifeBegin;
            lbl9.Caption:=MyCardData.UserLifeEnd;
            lbl10.Caption:=MyCardData.reserved;
            img1.Picture.Bitmap.LoadFromFile('tmp.bmp');
            img1.Picture.Bitmap.Transparent := True;
            img1.Picture.Bitmap.TransParentColor := img1.Picture.Bitmap.canvas.pixels[5,3];
            Syn_SendSound(0);
            Syn_DelPhotoFile;
          end;  
        end;  
      end;
      Syn_ClosePort(1001); 
    end;end.哪位帮我看看。label中显示的信息都是乱码,除了Name之外。大家帮我看看啊。我另外再加100分。
      

  7.   

    我靠,你是哪家公司的程序员?
    第二代身份证的读卡接口都让你泄漏了,你,你,你等着坐牢吧,你。
    从二代证里读出来的数据都是Unicode行的。
    你要用WideCharToMultiByte 来转换的。
      

  8.   


    这怎么算泄漏啊,又不是动态库源码,调用的接口是开放的,即使没有sdk也可以通过其他渠道得到。我们调用的api难道是ms把windows内核泄漏了啊?乱码我想主要是字符串数据类型上出了问题,你可以
     tagIDCardData = packed record
        Name: string; 
        Sex: string;
        ……然后在实例时用setlength分配每个成员属性的长度
      

  9.   

    tagIDCardData = packed record 
        Name: string; 
        Sex: string; 
        …… 
    如果只是单单改以上地方,不行。然后在实例课堂setlength分配每个成员属性的长度(这个要怎么做????????在哪里地方改动?)
      

  10.   

    tagIDCardData = packed record 
        Name: string; 
        Sex: string; 
        …… 
    如果只是单单改以上地方,不行。 然后在实例课堂setlength分配每个成员属性的长度(这个要怎么做????????在哪里地方改动?)
      

  11.   

        Born: array[0..18] of AnsiChar;        //范围
      

  12.   

    一个从C++改来的示例:
    Len: integer;
    DestData: PChar;Len := WideCharToMultiByte(ACP, WC_COMPOSITECHECK, IDCardData.Name, -1, nil, 0, nil, nil);
    GetMem(DestData, Len * 2);
    ZeroMemory(DestData, Len * 2);
    WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, IDCardData.Name, 32, DestData, Len, nil, nil);