Declare Function SinoConnCICalcFunc Lib "dll文件名" (ByVal nport As Long, ByRef pVerfiyMsg As String, ByRef pCalcMsg As String, ByRef pResultMsg As String) As Boolean
Private Declare Function SinoConnCICalcFunc Lib "dll文件名" (ByVal nport As Long, ByRef pVerfiyMsg As String, ByRef pCalcMsg As String, ByRef pResultMsg As String) As Boolean或Public Declare Function SinoConnCICalcFunc Lib "dll文件名" (ByVal nport As Long, ByRef pVerfiyMsg As String, ByRef pCalcMsg As String, ByRef pResultMsg As String) As Boolean
返回类型应该是 As Integer
调用时VB会自动关闭。 自己研究看了资料使用byte数组 Public Declare Function SinoConnCICalcFunc Lib "dll文件名" (ByVal nport As Long, ByRef pVerfiyMsg As Any, ByRef pCalcMsg As Any, ByRef pResultMsg As Any) As Boolean dim bytVerfiyMsg(9) dim bytCalcMsg(19) dim bytResultMSg(9) dim strVerfiyMsg as stringcall sinoconncicalcfunc(1,bytverfiymsg(0),bytcalcmsg(0),bytresultmsg(0)) 这样使用才不会报错。
自己研究看了资料使用byte数组
Public Declare Function SinoConnCICalcFunc Lib "dll文件名" (ByVal nport As Long, ByRef pVerfiyMsg As Any, ByRef pCalcMsg As Any, ByRef pResultMsg As Any) As Boolean dim bytVerfiyMsg(9)
dim bytCalcMsg(19)
dim bytResultMSg(9)
dim strVerfiyMsg as stringcall sinoconncicalcfunc(1,bytverfiymsg(0),bytcalcmsg(0),bytresultmsg(0))
这样使用才不会报错。
传递参数类型用byte数组传递指针的用varptr(pOut)自动退出说明类型匹配,直接崩溃
传递参数类型用byte数组传递指针的用varptr(pOut)自动退出说明类型不匹配,直接崩溃
对的,这里关键有两点:
(1)使用Byte数组而不使用String类型,可以避免VB自动对参数进行UA/AU转换所带来的错误结果甚至崩溃;
(2)在VB中数组标识符的地址不等于数组首元素的地址(与C语言有严重区别),所以要传数组首元素地址时要直接用bytverfiymsg(0)以ByRef方式传,而不同传bytverfiymsg。
同传bytverfiymsg而不能传bytverfiymsg
dim pVerfiyMsg as string * 10