VB.NET 连接 POS机 DLL接口出错,请高手指点!!!

zywy_zhsb 2008-05-25 10:27:47
POS机与pc通讯函数
函数原型:int ExchangeData(unsigned char TransType,
unsigned char *ToTerminal, unsigned short ReqLen
unsigned char *FrmTerminal, unsigned short *RepLen,
unsigned short TimeOut)
输入参数:
TransType  交易类型
ToTerminal  交易请求数据
ReqLen  交易请求数据长度
FrmTerminal  交易应答数据
RepLen  交易应答数据长度
TimeOut  交易处理超时时间

改成VB.NET:
Public Structure 查询
Public 交易类型 As Byte
Public 交易结果 As Byte
Public 返回数据 As String
End Structure

Private Declare Function ExchangeData Lib "zhsb_api.dll" Alias "ExchangeData" (ByVal _
TransType As Byte, ByVal _
ToTerminal As String, ByVal _
ReqLen As Integer, ByVal _
FrmTerminal As 查询, ByVal _
RspLen As Integer, ByVal _
TimeOut As Short _
) As Integer

查询时, 交易请求包为空,传入的长度参数为0
返回交易应答格式:
交易类型:(1字节,查询为0x31)
交易结果标志:(1字节)
交易数据:(交易成功426定长字节,内容见下,交易失败时,为中文提示信息)

运行程序后与POS机连接,POS机显示查询正确,但PC机显示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
请各位大侠帮忙看看,先感谢各位!

附POS返回给电脑的数据包格式:
交易数据包
交易(查询)
交易请求包1(查询)
为空,传入的长度参数为0
交易响格式(查询)
交易类型(1字节,查询为0x31)
(1字节,交易结果标志
交易数据(交易成功426定长字节,内容见下,交易失败时,为中文提示信息)
交易结果标志:1字节,
0x00-成功,后面跟的是426个字节的交易数据
其他值 交易失败,后面以中文字符方式应答了失败原因,不需要处理其响应码
交易数据:426字节的交易数据(为了不更改以后接口用)
注:BCD码为压缩的十进制数,HEX为16进制数,为不可压缩数值。
卡的识别码 16字节 32位压缩BCD码
卡类别 1字节
规范版本 4字节 HEX码
初始化机构编号 12字节 24位压缩BCD码
发卡日期 4字节 8位压缩BCD码
失效日期 4字节 8位压缩BCD码
卡号 9字节 字符
公民身份证号码 18字节 字符
姓名 30字节 字符
性别 1字节 字符
民族 1字节 2位压缩BCD码
出生地 3字节 6位压缩BCD码
出生日期 4字节 8位压缩BCD码
基本医疗保险个人账户建立日期 4字节 8位压缩BCD码
定点医疗机构名称1 62字节 字符
定点医疗机构名称扩展1 8字节 字符
定点医疗机构代码1 9字节 字符
定点医疗机构名称2 62字节 字符
定点医疗机构名称扩展2 8字节 字符
定点医疗机构代码2 9字节 字符
定点医疗机构名称3 62字节 字符
定点医疗机构名称扩展3 8字节 字符
定点医疗机构代码3 9字节 字符
医疗证号 15字节 字符
基本医疗保险个人账户 10字节 字符
医疗人员类别 1字节
医疗保险用卡方式 1字节
基本医疗保险个人账户余额 4字节 高位在前的HEX码
年度个人自付累计金额 4字节 高位在前的HEX码
年度统筹基金支付累计金额 4字节 高位在前的HEX码
发卡行ID 8字节 16位BCD码(转换后取左三位上传)
最近审核日期 4字节 8位压缩BCD码
分散因子 8字节 HEX码
黑名单版本号 19字节

附上C语言结构
typedef struct
{
unsigned char card_id [0x10];
unsigned char card_type [0x01];
unsigned char criterion [0x04];
unsigned char initorgan [0x0c];
unsigned char issuer_dt [0x04];
unsigned char expire [0x04];
unsigned char cardno [0x09];
unsigned char personid [0x12];
unsigned char name [0x1e];
unsigned char sex [0x01];
unsigned char nation [0x01];
unsigned char homeplace [0x03];
unsigned char birthday [0x04];
unsigned char accreatedt [0x04];
unsigned char hospitalname1 [0x3e];
unsigned char hospitalnameext1 [0x08];
unsigned char hospitalcode1 [0x09];
unsigned char hospitalname2 [0x3e];
unsigned char hospitalnameext2 [0x08];
unsigned char hospitalcode2 [0x09];
unsigned char hospitalname3 [0x3e];
unsigned char hospitalnameext3 [0x08];
unsigned char hospitalcode3 [0x09];
unsigned char medicerti [0x0f];
unsigned char mediaccount [0x0a];
unsigned char meditype [0x01];
unsigned char usecardtype [0x01];
unsigned char balance0 [0x04];
unsigned char balance1 [0x04];
unsigned char balance2 [0x04];
unsigned char bankid [0x08];
unsigned char latestchktime [0x04];
unsigned char diverfactor [0x08];
unsigned char blacklistver [0x13];
} T_MEDICARDINFO;



注:发卡行ID==0+卡号的前两位(例如05)== 005
分散因子采用三级分散因子



交易(消费)
交易请求2(消费)
金额(12位数值,压缩成6字节BCD码,不足时前补0)
商户名称(16字节,即最多8个中文字,不足填空格)
商户操作人员姓名(8字节,即最多4个中文字,不足填空格)
PC编号(12字节ASCII, 不足时后补二进制0)
PC交易序号(12字节ASCII, 不足时后补二进制0)
交易响应2(消费)
交易类型(1字节,消费为0x32)
0x02(1字节,交易结果标志)
交易数据(交易成功34定长字节,内容见下,交易失败时,为中文提示信息)
交易结果标志:1字节,
0x00-成功,后面跟的是34个字节的交易数据
其他值 交易失败,后面以中文字符方式应答了失败原因,不需要处理其响应码
交易数据:34字节,
仅在交易成功时需要,包括以下数据:
交易类型标志,1字节,根据医保卡规范
交易金额 12位数值 6字节BCD码,高位前,单位为分
交易日期, 8位数值, 4字节BCD码,CCYYMMDD
交易时间, 6位数值, 3字节BCD码,HHMMSS
终端机编号, 12位数值,6字节BCD码
PSAM交易号, 4字节 高位在前的HEX 码
卡片的交易签名TAC 4字节的 HEX码
卡片的脱机交易序号 2字节 高位在前的HEX 码
卡片交易后余额 4字节 高位在前的 HEX 码
注意:1 BCD码为压缩的十进制数,HEX为16进制数,为不可压缩数值。
2.金额使用压缩的12位BCD码 参照ISO8583规范
3.所有数据使用规范参照现用的医保卡标准,银行清算需要这些数据进行交易有效性检查

附上C结构


typedef struct
{
/*交易类型标志 */
unsigned char transtype;
/*交易金额 */
unsigned char transamount[6];
/*交易日期时间 */
unsigned char transdatetime[7];
/*终端机编号*/
unsigned char samid[6];
/*PSAM卡交易序号 */
unsigned char psamptc[4];
/*用户卡验证码 */
unsigned char transtac[4];
/*用户卡交易序号 */
unsigned char transoffctc[2];
/*用户卡余额 */
unsigned char nowbalance[4];
} T_SENDTRANS;

交易(结算)
清算请求
为空,传入的长度参数为0
清算响应
交易类型(1字节,为0x34)
(1字节,交易结果标志
交易数据(交易成功12定长字节,内容见下,交易失败时,为中文提示信息)
交易结果标志:1字节,
0x00-成功,后面跟的是12个字节的交易数据
其他值 交易失败,后面以中文字符方式应答了失败原因,不需要处理其响应码
交易数据:12字节的交易数据
注:BCD码为压缩的十进制数
终端交易总金额 12位数值 6字节BCD码,高位前,单位为分
终端交易总笔数 12位数值 6字节BCD码,高位前


...全文
563 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
呃 你得指定字符集
zywy_zhsb 2008-05-25
  • 打赏
  • 举报
回复
如何指定,能讲讲骂?谢谢!
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情参阅“致Windows XP用户.txt”文件)、Windows Vista以及Windows 7,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V2.1版分为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件,增强版中还额外包含了c++ Redistributable Package,因此增强版适合无法自行解决c++相关问题的用户使用;在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。此功能仅限于增强版。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了2项高级功能。点击其中的“注册系统中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。注意,并不是所有的dll文件都可以通过这种方式注册。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7用户,可以直接运行本程序。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388 所有的更新以及技术支持都可以到该博客上找到。
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows Blue(Windows 8.1),同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.0版分为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件,增强版中还额外包含了c++ Redistributable Package,因此增强版适合无法自行解决c++相关问题的用户使用;在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。V3.0版本使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。此功能仅限于增强版。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了3项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。注意,并不是所有的dll文件都可以通过这种方式注册。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7用户,可以直接运行本程序。 同时鉴于Windows 8(Windows Blue、Windows 8.1)系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows Blue、Windows 8.1)系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388所有的更新以及技术支持都可以到该博客上找到。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧