VB调用VC 参数为char* 但是其实是结构体,该如何解决
名称 说明函数名称 int bank(char * pTransDataBuf)
功能描述 提供给收银机软件调用。根据输入的交易数据,完成交易后,输出交易结果。交互界面由收银机软件实现。
输入参数 Char * pTransDataBuf :交易请求数据
输出参数 Char * pTransDataBuf :交易响应数据
返回值 0- 成功 , 其他-失败。
内容 格式 长度 交易标志 描 述
交易类型 ASCII Int 输入数据 输入交易编码
0:签到1:消费 2:撤销 3:查余额
4:结算 10:退货 61:重打印
7:重打结算单
Pin值 ASCII int 输入数据 1
响应码 ASCII Char
(2+1) 输出数据 00 表示成功,其它表示失败
二磁道长度 ASCII int 输出数据 备用
三磁道长度 ASCII int 输出数据 银行卡卡类
二磁道数据 ASCII Char
(37+1) 输出数据 银行卡名称
三磁道数据 ASCII Char
(104+1) 输出数据 三位数字,应该和请求一致
金额 ASCII Char
(15+1) 输入数据 信用卡刷卡成功金额,char(12+1),没有小数点".",精确到分,最后两位,不足补0
操作员号 ASCII Char
(15+1) 输入数据 15位操作员编号。
柜台号 ASCII Char
(15+1) 输入数据 15位柜台号。
原交易流水 ASCII Char
(6+1) 输入数据 撤销时候用的
余额 ASCII Char
(12+1) 输出数据 查询卡金额的时候输出
卡号 ASCII Char
(19+1) 输出数据
备注 ASCII Char
(6+1) 输出数据
原交易参考号 ASCII Char
(12+1) 输入数据 退货时候用到的
原交易日期 ASCII Char
(4+1) 输入数据 退货时候用到的
原交易批次号 ASCII Char
(6+1) 输入数据 退货时候用到的
原交易凭证号 ASCII Char
(6+1) 输入数据 退货时候用到的
银行行号 ASCII Char
(4+1) 输出数据
商户号 ASCII Char
(15+1) 输出数据
终端号 ASCII Char
(8+1) 输出数据
批次号 ASCII Char
(6+1) 输出数据
流水号 ASCII Char
(6+1) 输出数据
系统参考号 ASCII Char
(12+1) 输出数据
日期 ASCII Char
(4+1) 输出数据 MMDD
时间 ASCII Char
(6+1) 输出数据 HHMMSS
LRC ASCII Char
(2+1) 输入数据
我的调用
Option Explicit
Public Declare Function bank Lib "TLCardMis.dll" (ByRef lpBuffer As TransData) As Integer
Public Type TransData
TransType As Integer
Pin As Integer
ResultCode As String * 2
trk2len As Integer
trk3len As Integer
trk2 As String
trk3 As String
Amount As String
Casher As String
Counter As String
OrgNo As String
Balance As String
CardNo As String
Stans As String
Old_Reference As String
Old_Date As String
Old_Batch As String
Old_Trace As String
IssBank As String
resF042 As String
resF041 As String
resF060 As String
resF011 As String
resF037 As String
resF013 As String
resF012 As String
End Type
Public req As TransData
/////////////////////////
Private Sub Command1_Click()
Dim result As Integer
req.TransType = 0
req.Pin = 1
req.trk2 = Space(37)
req.trk3 = Space(104)
req.Amount = Space(12)
req.Casher = Space(15)
req.Counter = Space(15)
req.OrgNo = Space(6)
req.Balance = Space(12)
req.CardNo = Space(19)
req.Stans = Space(6)
req.Old_Reference = Space(12)
req.Old_Date = Space(4)
req.Old_Batch = Space(6)
req.Old_Trace = Space(6)
req.IssBank = Space(4)
req.resF042 = Space(15)
req.resF041 = Space(8)
req.resF060 = Space(6)
req.resF011 = Space(6)
req.resF037 = Space(12)
req.resF013 = Space(4)
req.resF012 = Space(6)
req.ResultCode = "ZB"
req.Counter = "000000000000001"
req.Casher = "000000000000001"
req.Amount = "000000000010"
result = bank(VarPtr(req))
End Sub
程序直接溢出退出了,这是为什么,哪位大虾知道?
--------------------编程问答-------------------- 你这个type是不是太多了 把他减少点调试下看是否退出 --------------------编程问答-------------------- 做成个.DLL的调用最好 --------------------编程问答-------------------- 1)VB 中的 String 是 BStr,除非直接在参数中调用,否则无法直接对应 Char*。
作为结构体的成员就是字符串指针,然后你用字符串值进行覆盖,当然会出错了。
如果一定要用结构就定义为定长字节数组,然后用 StrConv() 取字符串值。
2)VB 的 Byte 为 1 字节,Integer 为 2 字节,Long 为 4 字节,注意与 C 的区别。
建议直接用拼接的字符串或字节数组做参数。
补充:VB , API