Delphi的结构体传值转成vb的写法有关问题

Delphi的结构体传值转成vb的写法问题
//发依时利690消费卡
function WriteER690Card(aSectorNo: ShortInt; PwdA: PChar; ER690CardInfo: TER690CardInfo): Boolean; stdcall; external ERTransDLL;
//读依时利690消费卡
function ReadER690Card(aSectorNo: ShortInt; PwdA: PChar; var ER690CardInfo: TER690CardInfo): Boolean; stdcall; external ERTransDLL;

读卡的转vb没有问题,写卡的因是对结构体传值的,vb的结构体只允许传址,该如何声明呢。

我是这样写的:
Private Declare Function YSL_WriteER690Card Lib "YSL_ERTrans.dll" Alias "WriteER690Card" (ByVal aSectorNo As Byte, ByVal PwdA As String, ByRef ER690CardInfo As YSL_TER690CardInfo) As Byte


------最佳解决方案--------------------
如果没理解错的话,“结构体传值” 的意思是将整个 TER690CardInfo 结构都压入参数堆栈吧!
这是相同的问题
  http://topic.****.net/u/20080410/10/85235b13-0af8-4938-8974-9b5e3687d548.html
需要将所有结构的成员全部用通过变通的方式声明在 VB 中,supergreenbean 还给出了合并 4 字节的方法。

总之这样的函数原型是不适合 API 调用的;常用的 API 传结构的方式,总是传指针的。
------其他解决方案--------------------
引用:
完整VB代码如下,麻烦帮看下是什么原因导致出现错误“DLL调用约定错误”


Private Type YSL_TER690CardInfo
    cardno As Long                   '卡号
    CardName As String * 8 '姓名
    CardBalance As Integer               '卡余额(单位分)……
为什么你的Private Type YSL_TER690CardInfo2下声明的都是byte呢,明显的不可能啊,至少有integer还有string类型吧,你自己对照delphi的做类型修改
------其他解决方案--------------------
完整VB代码如下,麻烦帮看下是什么原因导致出现错误“DLL调用约定错误”


Private Type YSL_TER690CardInfo
    cardno As Long                   '卡号
    CardName As String * 8 '姓名
    CardBalance As Integer               '卡余额(单位分)
    ChargeTimes As Integer               '充值次数
    OverPwd As Long                  '超额密码
    DayMoney As Integer                  '日累计
    Period As Byte                    '消费时段
    PeriodCount As Byte               '时段次数
    MonthDay As Integer                  '消费月日
    OrderGroup As Integer                '订餐分组(0-15组)
    OrderMonth As Byte                '订餐月
    OrderDay As Byte                  '订餐日