首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

想问一下这个动态库接口如何写呢

2013-03-26 
想问一下这个动态库接口怎么写呢?动态库:sdtapi.dll读卡信息接口我不知道怎么写,特别是pMsg给分配内存192,

想问一下这个动态库接口怎么写呢?
动态库:sdtapi.dll
读卡信息接口我不知道怎么写,特别是pMsg给分配内存192,这个要怎么写呢?


Private Declare Function ReadBaseMsg Lib "sdtapi.dll" (ByVal pMsg As String, ByVal pLen As Long) As Long  ‘读卡信息
Dim I As Long
Dim pMsg(192) As Byte
Dim pLen As Long
I = ReadBaseMsg(pMsg, pLen)
If I = 1 Then
    msgbox "2.卡认证成功"
    msgbox pMsg
    msgbox pLen
ElseIf 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

[解决办法]


Option Explicit

'×××××××××××××××××××××××××××××××××××××××××
'参数说明:pMsg:一个定长的字符串
'        :pLen:指定消息的长度,长度不能大于pMsg的长度
'×××××××××××××××××××××××××××××××××××××××××
Private Declare Function ReadBaseMsg Lib "sdtapi.dll" (ByVal pMsg As String, pLen As Long) As Long   '读卡信息
Dim I As Long
Dim pMsg As String * 256
Dim pLen As Long
I = ReadBaseMsg(pMsg, Len(pLen))


If I = 1 Then
    MsgBox "2.卡认证成功"
    MsgBox pMsg
    MsgBox pLen
ElseIf I = 0 Then
    MsgBox "2.卡认证失败"
End If




能不能把DLL提供一下?

[解决办法]

Option Explicit

'×××××××××××××××××××××××××××××××××××××××××
'参数说明:pMsg:一个定长的字符串
'        :pLen:指定消息的长度,长度不能大于pMsg的长度
'×××××××××××××××××××××××××××××××××××××××××
Private Declare Function ReadBaseMsg Lib "sdtapi.dll" (ByRef pMsg As String, pLen As Long) As Long   '读卡信息
Dim I As Long
Dim pMsg As String * 256
Dim pLen As Long
I = ReadBaseMsg(pMsg, Len(pLen))
If I = 1 Then
    MsgBox "2.卡认证成功"
    MsgBox pMsg
    MsgBox pLen
ElseIf I = 0 Then
    MsgBox "2.卡认证失败"
End If



热点排行