#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格式。分数我会加上,谢谢了。
#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格式。分数我会加上,谢谢了。
解决方案 »
- delphi怎样调用C++Builder写的*.Lib静态函数包啊?
- rzdbedit 无法找到相关字段
- sql server数据库资料繁体转简体的问题
- 一个设计思路的问题
- 我程序都做好了,公司已经在用,数据也已经进去,可发现FastReport由于未注册只能打一页,急啊,怎么办?
- 关于Desktop数据库的问题
- 公司坐骑调查,呵呵!!!!
- 关于businessskinform控件的用法
- 在线,急救..... Excel的时间问题
- 怎样得到查找结果?
- 我的treeview从数据库取数怎么少了一行?
- 求助WEBBROWSER.NAVIGATE时,IE6.0和8.0都可以打开,但是7.0提示找不到网站
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的名称
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 --
=======================================================================
然后还要 fillchar(mycard,sizeof(mycard), 0);
另外可以单独把 tagIDCardData 设置成 array[0..XX] of char XX由结构的所有成员的长度决定,
C 传结构进去 其实也是传的字符串 强制转换一下应该是可以的
这是怎么回事呢。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分。
第二代身份证的读卡接口都让你泄漏了,你,你,你等着坐牢吧,你。
从二代证里读出来的数据都是Unicode行的。
你要用WideCharToMultiByte 来转换的。
这怎么算泄漏啊,又不是动态库源码,调用的接口是开放的,即使没有sdk也可以通过其他渠道得到。我们调用的api难道是ms把windows内核泄漏了啊?乱码我想主要是字符串数据类型上出了问题,你可以
tagIDCardData = packed record
Name: string;
Sex: string;
……然后在实例时用setlength分配每个成员属性的长度
Name: string;
Sex: string;
……
如果只是单单改以上地方,不行。然后在实例课堂setlength分配每个成员属性的长度(这个要怎么做????????在哪里地方改动?)
Name: string;
Sex: string;
……
如果只是单单改以上地方,不行。 然后在实例课堂setlength分配每个成员属性的长度(这个要怎么做????????在哪里地方改动?)
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);