原来他们的SDK包已经包含了一个DLL文件,只要在Vb中申明一下就行了。但是里面包括了一个结构体还有关于指针、引用调用等操作,不熟练所以一直弄不出来,哪位兄弟能否帮一把,帮我把C语言的翻译成VB。下面是这个Syn_IDCardRead.dll的源代码,我定义了两个函数测试可以通过,可其它的就不会弄了。Syn_IDCardRead.h内容如下:#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
Public Type tagIDCardData Name As String * 32 Sex As String * 4 Nation As String * 6 Born As String * 18 Address As String * 72 IDCardNo As String * 38 GrantDept As String * 32 UserLifeBegin As String * 18 UserLifeEnd As String * 18 reserved As String * 38 PhotoFileName As String * 255 End Type
Public Declare Function Syn_GetCOMBaud Lib "dll" (ByVal iComID As Long, ByRef puiBaud As Long) As Long ...................
能请你帮我把这三个函数一起翻译一下吗?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);
Private Declare Function Syn_StartFindIDCard Lib "aa" (byvaliPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long Private Declare Function Syn_SelectIDCard Lib "aa" (ByVal iPortID As Long, ByRef pucManaMsg As String, ByVal iIfOpen As Long) As Long Private Declare Function Syn_ReadMsg Lib "aa" (ByVal iPortID As Long, ByVal iIfOpen As Long, ByRef pIDCardData As Any) As Long
月亮,我想请问一下。为什么每次打开端口都正确了,但是用Syn_StartFindIDCard函数时,却总是返回不正确。我把代码贴出来,还请指点一下。Private Declare Function Syn_OpenPort Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long) As Long Private Declare Function Syn_ClosePort Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long) As LongPrivate Declare Function Syn_StartFindIDCard Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long Private Declare Function Syn_SelectIDCard Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByRef pucManaMsg As String, ByVal iIfOpen As Long) As Long Private Declare Function Syn_ReadMsg Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByVal iIfOpen As Long, ByRef pIDCardData As Any) As Long Private Type tagIDCardData Name As String * 32 Sex As String * 4 Nation As String * 6 Born As String * 18 Address As String * 72 IDCardNo As String * 38 GrantDept As String * 32 UserLifeBegin As String * 18 UserLifeEnd As String * 18 reserved As String * 38 PhotoFileName As String * 255 End Type
Private Sub Command1_Click() Dim ifOpen As Integer Dim iPort As Integer Dim iRet As Integer Dim pucIIN As String * 4 Dim pucSN As String * 8 Dim CardMsg As tagIDCardDataifOpen = 0 iPort = 1 iRet = Syn_OpenPort(iPort) pucIIN = Space(4) pucSN = Space(8) MsgBox iRet If iRet = 0 Then iRet = Syn_StartFindIDCard(iPort, pucIIN, iffopen)//这里总是返回-3而不是0,不知道是不是哪里定义有问题 MsgBox iRet Syn_ClosePort iPort End If End Sub
狼大哥,现在是这样一个问题,请帮忙看一下C中是这样定义的: int STDCALL Syn_StartFindIDCard(int iPortID,unsigned char *pucManaInfo,int iIfOpen); 调用时: int ifOpen; int iPort; int iRet; unsigned char pucIIN[4]; ifOpen=0;//是否需要打开串口 iPort=1; iRet=Syn_StartFindIDCard(iPort,pucIIN,ifOpen);而翻译成VB后我是这样定义的: Private Declare Function Syn_StartFindIDCard Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long调用时: Dim ifOpen As Integer Dim iPort As Integer Dim iRet As Integer Dim pucIIN As String * 4 ifOpen = 0 iPort = 1 pucIIN = Space(4) '在网上搜了很久,说要给这个字符串赋一个初始值。 iRet = Syn_StartFindIDCard(iPort, pucIIN, ifOpen)//这里总是返回-3而不是0,不知道是不是参数定义有问题错误代误说明:-3 PC接收超时,在规定的时间内未接收到规定长度的数据
在VB里面引用这个DLL对象,然后DIM XX AS NEW ...... 再后来就看里面提供的方法和属性等了
Private Declare Function Syn_OpenPort Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long) As Long Private Declare Function Syn_ClosePort Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long) As Long Private Declare Function Syn_StartFindIDCard Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long Private Declare Function Syn_SelectIDCard Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long, ByRef pucManaMsg As String, ByVal iIfOpen As Long) As Long Private Declare Function Syn_ReadMsg Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long, ByVal iIfOpen As Long, ByRef pIDCardData As Any) As Long Private Type tagIDCardData Name As String * 32 Sex As String * 4 Nation As String * 6 Born As String * 18 Address As String * 72 IDCardNo As String * 38 GrantDept As String * 32 UserLifeBegin As String * 18 UserLifeEnd As String * 18 reserved As String * 38 PhotoFileName As String * 255 End Type
Private Sub Command1_Click() Dim ifOpen As Integer Dim iPort As Integer Dim iRet As Integer Dim pucIIN As String * 4 Dim pucSN As String * 8 Dim CardMsg As tagIDCardData ifOpen = 0 iPort = 1 iRet = Syn_OpenPort(iPort) pucIIN = Space(4) pucSN = Space(8) MsgBox iRet If iRet = 0 Then iRet = Syn_StartFindIDCard(iPort, pucIIN, iffopen)//这里总是返回-3而不是0,不知道是不是哪里定义有问题 MsgBox iRet Syn_ClosePort iPort End If End Sub现附上SDK全部内容,麻请各位高手帮我看看是怎么回事!谢谢 1. 端口类API int Syn_OpenPort(int iPortID); 说明: 打开串口/USB口 参数:iPortID [in] 整数,表示端口号。1-16(十进制)为串口,1001-1016(十进制)为USB口,缺省的一个USB设备端口号是1001。 返回值:成功返回0,错误返回见6。 int Syn_ClosePort(int iPortID); 说明: 关闭串口/USB口 参数:iPortID [in] 整数,表示端口号。 返回值:成功返回0,错误返回见6。
int Syn_GetCOMBaud(int iComID,unsigned int *puiBaudRate); 说明: 查看串口的波特率 参数:iPort [in] 整数,表示端口号。此处端口号必须为1-16,表示串口,参见7.1。 puiBaudRate [out] 无符号整数指针,指向普通串口当前波特率, 默认情况下为 115200。 返回值:成功返回0,错误返回见6。 int Syn_SetCOMBaud(int iComID,unsigned int uiCurrBaud,unsigned int uiSetBaud); 说明: 设置串口的波特率 参 返回值:成功返回0,错误返回见6。2. SAM类API int Syn_GetSAMStatus(int iPortID,int iIfOpen); 说明: 对SAM_V进行状态检测 参数:iPort [in] 整数,表示端口号。参见7.1。 iIfOpen [in] 整数,参见7.2。返回值:成功返回0,错误返回见6。int Syn_ResetSAM(int iPortID,int iIfOpen); 说明: 对SAM_V复位参数:iPort [in] 整数,表示端口号。参见7.1。 iIfOpen [in] 整数,参见7.2。返回值:成功返回0,错误返回见6。 int Syn_GetSAMID(int iPortID,unsigned char *pucSAMID,int iIfOpen); 说明: 读取SAM_V的编号(十六进制) 参数:iPort [in] 整数,表示端口号。参见7.1。 pucSAMID [out] 无符号字符串指针,SAM_V编号,16字节。 iIfOpen [in] 整数,参见7.2。返回值:成功返回0,错误返回见6。
#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
Name As String * 32
Sex As String * 4
Nation As String * 6
Born As String * 18
Address As String * 72
IDCardNo As String * 38
GrantDept As String * 32
UserLifeBegin As String * 18
UserLifeEnd As String * 18
reserved As String * 38
PhotoFileName As String * 255
End Type
...................
int STDCALL Syn_SelectIDCard(int iPortID,unsigned char *pucManaMsg,int iIfOpen);
int STDCALL Syn_ReadMsg(int iPortID,int iIfOpen,IDCardData *pIDCardData);
Private Declare Function Syn_SelectIDCard Lib "aa" (ByVal iPortID As Long, ByRef pucManaMsg As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_ReadMsg Lib "aa" (ByVal iPortID As Long, ByVal iIfOpen As Long, ByRef pIDCardData As Any) As Long
Private Declare Function Syn_ClosePort Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long) As LongPrivate Declare Function Syn_StartFindIDCard Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_SelectIDCard Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByRef pucManaMsg As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_ReadMsg Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByVal iIfOpen As Long, ByRef pIDCardData As Any) As Long
Private Type tagIDCardData
Name As String * 32
Sex As String * 4
Nation As String * 6
Born As String * 18
Address As String * 72
IDCardNo As String * 38
GrantDept As String * 32
UserLifeBegin As String * 18
UserLifeEnd As String * 18
reserved As String * 38
PhotoFileName As String * 255
End Type
Private Sub Command1_Click()
Dim ifOpen As Integer
Dim iPort As Integer
Dim iRet As Integer
Dim pucIIN As String * 4
Dim pucSN As String * 8
Dim CardMsg As tagIDCardDataifOpen = 0
iPort = 1
iRet = Syn_OpenPort(iPort)
pucIIN = Space(4)
pucSN = Space(8)
MsgBox iRet
If iRet = 0 Then
iRet = Syn_StartFindIDCard(iPort, pucIIN, iffopen)//这里总是返回-3而不是0,不知道是不是哪里定义有问题 MsgBox iRet
Syn_ClosePort iPort
End If
End Sub
-1 端口打开失改/端口尚未打开/端口号不合法
-2 证/卡中此项无内容
-3 PC接收超时,在规定的时间内未接收到规定长度的数据
-4 数据传输错误
-5 该SAM_V串口不可用,只在SDT_GetCOMBaud时才有可能返回。
-6 接收业务终端数据的校验和错
-7 接收业务终端数据的长度错
-8 接收业务终端的命令错误,包括命令中的各种数值或逻辑搭配错误
-9 越权操作
-10 无法识别的错误
-11 寻找证/卡失败
-12 选取证/卡失败
-13 调用sdtapi.dll错误
-14 相片解码错误
-15 授权文件不存在
-16 设备连接错误
{ //TODO:Add your control notification handler code here
int ifOpen;
int iPort;
int iRet;
unsigned char pucIIN[4];
unsigned char pucSN[8];
IDCardData CardMsg;
ifOpen=0;//是否需要打开串口
iPort=1;
iRet=Syn_OpenPort(iPort);
if(iRet==0)
{ iRet=Syn_StartFindIDCard(iPort,pucIIN,ifOpen);
if(iRet==0)
{ iRet=Syn_SelectIDCard(iPort,pucSN,ifOpen)
if(iRet==0)
{ iRet=Syn_ReaMsg(iPort,0,&CardMsg);
if(iRet==0)
{ //显示读出的信息
UpdateData(true);
m_name-CardMsg.Name;
UpdateData(false);
Syn_SendSound(0);
Syn_DelPhotoFile();
}
}
}
}
Syn_ClosePort(iPort);
}
http://www.egooglet.com 资料、源码下载http://bbs.j2soft.cn 论坛交流
═══════════════════
int STDCALL Syn_StartFindIDCard(int iPortID,unsigned char *pucManaInfo,int iIfOpen);
调用时:
int ifOpen;
int iPort;
int iRet;
unsigned char pucIIN[4];
ifOpen=0;//是否需要打开串口
iPort=1;
iRet=Syn_StartFindIDCard(iPort,pucIIN,ifOpen);而翻译成VB后我是这样定义的:
Private Declare Function Syn_StartFindIDCard Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long调用时:
Dim ifOpen As Integer
Dim iPort As Integer
Dim iRet As Integer
Dim pucIIN As String * 4
ifOpen = 0
iPort = 1
pucIIN = Space(4) '在网上搜了很久,说要给这个字符串赋一个初始值。
iRet = Syn_StartFindIDCard(iPort, pucIIN, ifOpen)//这里总是返回-3而不是0,不知道是不是参数定义有问题错误代误说明:-3 PC接收超时,在规定的时间内未接收到规定长度的数据
再后来就看里面提供的方法和属性等了
Private Declare Function Syn_ClosePort Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long) As Long Private Declare Function Syn_StartFindIDCard Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_SelectIDCard Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long, ByRef pucManaMsg As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_ReadMsg Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long, ByVal iIfOpen As Long, ByRef pIDCardData As Any) As Long
Private Type tagIDCardData
Name As String * 32
Sex As String * 4
Nation As String * 6
Born As String * 18
Address As String * 72
IDCardNo As String * 38
GrantDept As String * 32
UserLifeBegin As String * 18
UserLifeEnd As String * 18
reserved As String * 38
PhotoFileName As String * 255
End Type
Private Sub Command1_Click()
Dim ifOpen As Integer
Dim iPort As Integer
Dim iRet As Integer
Dim pucIIN As String * 4
Dim pucSN As String * 8
Dim CardMsg As tagIDCardData ifOpen = 0
iPort = 1
iRet = Syn_OpenPort(iPort)
pucIIN = Space(4)
pucSN = Space(8)
MsgBox iRet
If iRet = 0 Then
iRet = Syn_StartFindIDCard(iPort, pucIIN, iffopen)//这里总是返回-3而不是0,不知道是不是哪里定义有问题 MsgBox iRet
Syn_ClosePort iPort
End If
End Sub现附上SDK全部内容,麻请各位高手帮我看看是怎么回事!谢谢
1. 端口类API
int Syn_OpenPort(int iPortID);
说明: 打开串口/USB口 参数:iPortID [in] 整数,表示端口号。1-16(十进制)为串口,1001-1016(十进制)为USB口,缺省的一个USB设备端口号是1001。 返回值:成功返回0,错误返回见6。 int Syn_ClosePort(int iPortID);
说明: 关闭串口/USB口 参数:iPortID [in] 整数,表示端口号。 返回值:成功返回0,错误返回见6。
int Syn_GetCOMBaud(int iComID,unsigned int *puiBaudRate);
说明: 查看串口的波特率 参数:iPort [in] 整数,表示端口号。此处端口号必须为1-16,表示串口,参见7.1。 puiBaudRate [out] 无符号整数指针,指向普通串口当前波特率, 默认情况下为 115200。 返回值:成功返回0,错误返回见6。 int Syn_SetCOMBaud(int iComID,unsigned int uiCurrBaud,unsigned int uiSetBaud);
说明: 设置串口的波特率 参
返回值:成功返回0,错误返回见6。2. SAM类API
int Syn_GetSAMStatus(int iPortID,int iIfOpen);
说明: 对SAM_V进行状态检测 参数:iPort [in] 整数,表示端口号。参见7.1。
iIfOpen [in] 整数,参见7.2。返回值:成功返回0,错误返回见6。int Syn_ResetSAM(int iPortID,int iIfOpen);
说明: 对SAM_V复位参数:iPort [in] 整数,表示端口号。参见7.1。
iIfOpen [in] 整数,参见7.2。返回值:成功返回0,错误返回见6。 int Syn_GetSAMID(int iPortID,unsigned char *pucSAMID,int iIfOpen);
说明: 读取SAM_V的编号(十六进制) 参数:iPort [in] 整数,表示端口号。参见7.1。
pucSAMID [out] 无符号字符串指针,SAM_V编号,16字节。
iIfOpen [in] 整数,参见7.2。返回值:成功返回0,错误返回见6。
int Syn_GetSAMIDToStr(int iPortID,char *pcSAMID,int iIfOpen);
说明: 读取SAM_V的编号(字符串格式)参数:iPort [in] 整数,表示端口号。参见7.1。
pcSAMID [out] 字符串指针,SAM_V编号。
iIfOpen [in] 整数,参见7.2。返回值:成功返回0,错误返回见6。3. 身份证卡类API
int Syn_StartFindIDCard(int iPortID,unsigned char *pucManaInfo,int iIfOpen);
说明: 开始找卡 参数:iPort [in] 整数,表示端口号。参见7.1。
pucManaInfo [out] 无符号字符指针,证/卡芯片管理号,4个字节。
iIfOpen [in] 整数,参见7.2。返回值:成功返回0,错误返回见6。
int Syn_SelectIDCard(int iPortID,unsigned char *pucManaMsg,int iIfOpen);
说明: 选卡 参数:iPort [in] 整数,表示端口号。参见7.1。
pucManaMsg [out] 无符号字符指针,证/卡芯片序列号,8个字节。
iIfOpen [in] 整数,参见7.2。返回值:成功返回0,错误返回见6。 int Syn_ReadMsg(int iPortID,int iIfOpen,IDCardData *pIDCardData);
说明: 读取证/卡信息 参数:iPort [in] 整数,表示端口号。参见7.1。
iIfOpen [in] 整数,参见7.2。
pIDCardData [out] IDCardData类型读出的数据,参见5。返回值:成功返回0,错误返回见6。4. 附加类API
int Syn_SendSound(int iCmdNo);
说明: 发送语音 参数:iCmdNo [in] 声音编号返回值:成功返回0,错误返回见6。void Syn_DelPhotoFile();
说明: 删除临时照片文件 参数:无返回值:成功返回0,错误返回见6。5. 结构体声明
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;6.函数返回值
0 操作成功或相片解码解码正确
-1 端口打开失败/端口尚未打开/端口号不合法
-2 证/卡中此项无内容
-3 PC接收超时,在规定的时间内未接收到规定长度的数据
-4 数据传输错误
-5 该SAM_V串口不可用,只在SDT_GetCOMBaud时才有可能返回
-6 接收业务终端数据的校验和错
-7 接收业务终端数据的长度错
-8 接收业务终端的命令错误,包括命令中的各种数值或逻辑搭配错误
-9 越权操作
-10 无法识别的错误
-11 寻找证/卡失败
-12 选取证/卡失败
-13 调用sdtapi.dll错误
-14 相片解码错误
-15 授权文件不存在
-16 设备连接错误7.注意
7.1系统支持的串行端口号:1-16,USB端口号:1001-1016 7.2 iIfOpen [in] 整数,0表示不在该函数内部打开和关闭串口,此时确保之前调用了Syn_OpenPort来打开端口,并且在不需要与端口通信时,调用Syn_ClosePort关闭端口;非0表示在API函数内部包含了打开端口和关闭端口函数,之前不需要调用Syn_OpenPort,也不用再调用Syn_ClosePort。 7.3 普通开发中只使用“端口类API”与“身份证卡类API” 与“附加类API”就能满足开发需要,
使用方法见第10部分实例。
7.4 在使用Syn_SendSound函数时请先用Syn_ClosePort函数关闭打开的端口。
7.5 SDK包包含文件
Syn_IDCardRead.dll、Syn_IDCardRead.lib、Syn_IDCardRead.h、sdtapi.dll、WltRS.dll8.声音命令暂时未定
0. 读身份证成功
9.Syn_IDCardRead.h头文件:
#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
}10.调用实例:
10.1 vc6.0调试通过
void CSampleDlg::OnButton1()
{
// TODO: Add your control notification handler code here
int ifOpen;
int iPort;
int iRet;
unsigned char pucIIN[4];
unsigned char pucSN[8];
IDCardData CardMsg;
ifOpen=0; //是否需要打开串口
iPort=1;
iRet=Syn_OpenPort(iPort);
if (iRet==0)
{
iRet=Syn_StartFindIDCard(iPort,pucIIN,ifOpen);
if (iRet==0)
{
iRet=Syn_SelectIDCard(iPort,pucSN,ifOpen);
if (iRet==0)
{
iRet=Syn_ReadMsg(iPort,0,&CardMsg);
if (iRet==0)
{
//显示读出的信息
UpdateData(true);
m_name=CardMsg.Name;
UpdateData(false);
Syn_SendSound(0);
Syn_DelPhotoFile();
}
} }
}
Syn_ClosePort(iPort);
}
QQ:150227334
QQ:150227334