想问一下这个动态库接口怎么写呢?动态库:sdtapi.dll读卡信息接口我不知道怎么写,特别是pMsg给分配内存192,
想问一下这个动态库接口怎么写呢?
动态库:sdtapi.dll
读卡信息接口我不知道怎么写,特别是pMsg给分配内存192,这个要怎么写呢?
VB codePrivate Declare Function ReadBaseMsg Lib "sdtapi.dll" (ByVal pMsg As String, ByVal pLen As Long) As Long ‘读卡信息Dim I As LongDim pMsg(192) As ByteDim pLen As LongI = ReadBaseMsg(pMsg, pLen)If I = 1 Then msgbox "2.卡认证成功" msgbox pMsg msgbox pLenElseIf I = 0 Then msgbox "2.卡认证失败"End If
我这样写不行,下面是开发文档
4.2.2.读卡信息接口
原 型:int ReadBaseMsg( unsigned char * pMsg, int * len);
说 明:本函数用于读取卡中基本信息,包括文字信息与图像信息。文字信息已经分段解析,输出格式为单字节,且每一字段信息已经被表示为字符串。图象信息被解码后存为文件photo.bmp(在当前工作目录下)。
参 数:
pMsg [out] 无符号字符指针,指向读到的文本信息。需要在调用时分配内存,字节数不小于192。函数调用成功后,各字段的文本信息已经转换为单字节形式,并表示为字符串格式。字段意义及偏移值如下所示:
项目长度(字节)说明
姓名31汉字
性别3汉字
民族10汉字
出生日期9CCYYMMDD
住址71汉字和数字
公民身份号码19数字
签发机关31汉字
有效期起始日期9CCYYMMDD
有效期截止日期9CCYYMMDD
有效期为长期的表示为汉字“长期”
Len[out] 整数, 返回总字符长度,可以给空值(NULL)。
返 回 值:
值意义
1正确
0错误
原 型2:int ReadBaseMsgPhoto( unsigned char * pMsg, int * len,char * directory);
说 明:本函数用于读取卡中基本信息,包括文字信息与图像信息。文字信息已经分段解析,输出格式为单字节,且每一字段信息已经被表示为字符串。图象信息被解码后存为文件photo.bmp(在directory指定目录下)。
参 数:
pMsg [out] 无符号字符指针,指向读到的文本信息。需要在调用时分配内存,字节数不小于192。函数调用成功后,各字段的文本信息已经转换为单字节形式,并表示为字符串格式。字段意义及偏移值如下所示:
项目长度(字节)说明
姓名31汉字
性别3汉字
民族10汉字
出生日期9CCYYMMDD
住址71汉字和数字
公民身份号码19数字
签发机关31汉字
有效期起始日期9CCYYMMDD
有效期截止日期9CCYYMMDD
有效期为长期的表示为汉字“长期”
Len[out] 整数, 返回总字符长度,可以给空值(NULL)。
directory[in] 字符指针,表示照片存储路径,路径最后有无“\”均可;可以给空值(NULL),表示照片存储在当前目录中,此时函数效果同ReadBaseMsg。
返 回 值:
值意义
1正确
0错误
4目录不存在
原 型3:int ReadBaseInfos( char * Name, char * Gender, char * Folk,
char *BirthDay, char * Code, char * Address,char *Agency, char * ExpireStart,char* ExpireEnd)
说 明:本函数用于读取卡中基本信息,包括文字信息与图像信息。文字信息以字符串格式输出。照片信息被解码后存为文件photo.bmp,身份证正面图片1.jpg,身份证反面图片2.jpg(在当前工作目录下)。
参 数:
Name[out] 字符型指针,指向姓名信息。需要在调用时分配内存,字节数不小31。
Gender[out] 字符型指针,指向性别信息(男或者女)。需要在调用时分配内存,字节数不小3。
Folk[out] 字符型指针,指向民族信息。需要在调用时分配内存,字节数不小10。
BirthDay[out] 字符型指针,指向出生日期信息。需要在调用时分配内存,字节数不小9,前四位为出生年,第5位到第6位是出生月,后两位是出生日,格式为:CCYYMMDD。
Code[out] 字符型指针,指向身份证号码信息。需要在调用时分配内存,字节数不小19。
Address[out] 字符型指针,指向地址信息。需要在调用时分配内存,字节数不小71。
Agency[out] 字符型指针,指向签证机关信息。需要在调用时分配内存,字节数不小31。
ExpireStart[out] 字符型指针,指向有效期起始日期信息。需要在调用时分配内存,字节数不小9, 格式为:CCYYMMDD。
ExpireEnd[out] 字符型指针,指向有效期截至日期信息。需要在调用时分配内存,字节数不小9,格式为:CCYYMMDD,有效期为长期的表示为汉字“长期”。
返 回 值:
值意义
1正确
0错误
原 型4:int ReadBaseInfosPhoto( char * Name, char * Gender, char * Folk,char *BirthDay, char * Code, char * Address,char *Agency, char * ExpireStart,char* ExpireEnd,char * directory)
说 明:本函数用于读取卡中基本信息,包括文字信息与图像信息。文字信息以字符串格式输出。图象信息被解码后存为照片photo.bmp和photo.jpg,身份证正面图片1.jpg,身份证反面图片2.jpg(在directory指定目录下)。
参 数:
Name[out] 字符型指针,指向姓名信息。需要在调用时分配内存,字节数不小31。
Gender[out] 字符型指针,指向性别信息(男或者女)。需要在调用时分配内存,字节数不小3。
Folk[out] 字符型指针,指向民族信息。需要在调用时分配内存,字节数不小10。
BirthDay[out] 字符型指针,指向出生日期信息。需要在调用时分配内存,字节数不小9,前四位为出生年,第5位到第6位是出生月,后两位是出生日,格式为:CCYYMMDD。
Code[out] 字符型指针,指向身份证号码信息。需要在调用时分配内存,字节数不小19。
Address[out] 字符型指针,指向地址信息。需要在调用时分配内存,字节数不小71。
Agency[out] 字符型指针,指向签证机关信息。需要在调用时分配内存,字节数不小31。
ExpireStart[out] 字符型指针,指向有效期起始日期信息。需要在调用时分配内存,字节数不小9, 格式为:CCYYMMDD。
ExpireEnd[out] 字符型指针,指向有效期截至日期信息。需要在调用时分配内存,字节数不小9,格式为:CCYYMMDD,有效期为长期的表示为汉字“长期”。
directory[in] 字符指针,表示照片存储路径,路径最后有无“\”均可;可以给空值(NULL),表示照片存储在当前目录中,此时函数效果同ReadBaseInfos。
返 回 值:
值意义
1正确
0错误
4目录不存在
原 型5:int ReadBaseMsgW( unsigned char * pMsg, int * len);
说 明:本函数用于读取卡中基本信息,包括文字信息与图像信息。文字信息未解析,文字信息采用GB13000的UCS-2进行存储,图象信息被解码后存为文件photo.bmp(在当前工作目录下)。
参 数:
pMsg [out] 无符号字符指针,指向读到的文本信息。需要在调用时分配内存,字节数不小于256。偏移值如下所示:
项目长度(字节)说明
姓名30汉字
性别2代码
民族4代码
出生16年月日:YYYYMMDD
住址70汉字和数字
公民身份号码36数字
签发机关30汉字
有效期起始日期16年月日:YYYYMMDD
有效期截止日期16年月日:YYYYMMDD
有效期为长期时存储“长期”
最新住址70汉字和数字
Len[out] 整数, 返回基本信息长度。
返 回 值:
值意义
1正确
0错误
原 型6:int ReadBaseMsgWPhoto( unsigned char * pMsg, int * len,char * directory));
说 明:本函数用于读取卡中基本信息,包括文字信息与图像信息。文字信息未解析,文字信息采用GB13000的UCS-2进行存储,图象信息被解码后存为文件photo.bmp(在directory指定目录下)。
参 数:
pMsg [out] 无符号字符指针,指向读到的文本信息。需要在调用时分配内存,字节数不小于256。偏移值如下所示:
项目长度(字节)说明
姓名30汉字
性别2代码
民族4代码
出生16年月日:YYYYMMDD
住址70汉字和数字
公民身份号码36数字
签发机关30汉字
有效期起始日期16年月日:YYYYMMDD
有效期截止日期16年月日:YYYYMMDD
有效期为长期时存储“长期”
最新住址70汉字和数字
Len[out] 整数, 返回基本信息长度。
directory[in] 字符指针,表示照片存储路径,路径最后有无“\”均可;可以给空值(NULL),表示照片存储在当前目录中,此时函数效果同ReadBaseMsgW。
返 回 值:
值意义
1正确
0错误
4目录不存在
注:读卡基本信息时,需要将身份证置于读卡机具上方做稍许时间的停留。
[解决办法]
Private Declare Function ReadBaseMsg Lib "sdtapi.dll" (ByRef pMsg As Byte, ByVal pLen As Long) As Long
Dim I As Long
Dim pMsg(191) As Byte
Dim pLen As Long
Dim strMsg As String
I = ReadBaseMsg(pMsg(0), pLen)
strMsg = StrConv(pMsg, vbUnicode)
If I = 1 Then
msgbox "2.卡认证成功"
msgbox strMsg
msgbox pLen
ElseIf I = 0 Then
msgbox "2.卡认证失败"
End If
[解决办法]
VB codeOption Explicit'×××××××××××××××××××××××××××××××××××××××××'参数说明:pMsg:一个定长的字符串' :pLen:指定消息的长度,长度不能大于pMsg的长度'×××××××××××××××××××××××××××××××××××××××××Private Declare Function ReadBaseMsg Lib "sdtapi.dll" (ByVal pMsg As String, pLen As Long) As Long '读卡信息Dim I As LongDim pMsg As String * 256Dim pLen As LongI = ReadBaseMsg(pMsg, Len(pLen))If I = 1 Then MsgBox "2.卡认证成功" MsgBox pMsg MsgBox pLenElseIf I = 0 Then MsgBox "2.卡认证失败"End If
[解决办法]
VB codeOption Explicit'×××××××××××××××××××××××××××××××××××××××××'参数说明:pMsg:一个定长的字符串' :pLen:指定消息的长度,长度不能大于pMsg的长度'×××××××××××××××××××××××××××××××××××××××××Private Declare Function ReadBaseMsg Lib "sdtapi.dll" (ByRef pMsg As String, pLen As Long) As Long '读卡信息Dim I As LongDim pMsg As String * 256Dim pLen As LongI = ReadBaseMsg(pMsg, Len(pLen))If I = 1 Then MsgBox "2.卡认证成功" MsgBox pMsg MsgBox pLenElseIf I = 0 Then MsgBox "2.卡认证失败"End If