BOOL SinoConnCICalcFunc(int nport, UCHAR* pVerfiyMsg, UCHAR* pCalcMsg,UCHAR* pResultMsg)这个API该怎么定义?还有我传进去的参数该怎么定义?
比如pVerfiyMsg的长度是10,我具体该怎么用?急!

解决方案 »

  1.   

    Declare Function SinoConnCICalcFunc Lib "dll文件名" (ByVal nport As Long, ByRef pVerfiyMsg As String, ByRef pCalcMsg As String, ByRef pResultMsg As String) As Boolean
      

  2.   

    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  
      

  3.   

    返回类型应该是 As Integer
      

  4.   

    调用时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))
    这样使用才不会报错。
      

  5.   

    定义为long
    传递参数类型用byte数组传递指针的用varptr(pOut)自动退出说明类型匹配,直接崩溃
      

  6.   

    定义为long
    传递参数类型用byte数组传递指针的用varptr(pOut)自动退出说明类型不匹配,直接崩溃
      

  7.   


    对的,这里关键有两点:
    (1)使用Byte数组而不使用String类型,可以避免VB自动对参数进行UA/AU转换所带来的错误结果甚至崩溃;
    (2)在VB中数组标识符的地址不等于数组首元素的地址(与C语言有严重区别),所以要传数组首元素地址时要直接用bytverfiymsg(0)以ByRef方式传,而不同传bytverfiymsg。
      

  8.   

    更正8楼:而不传bytverfiymsg
    而不传bytverfiymsg
      

  9.   

    '根据数据长度声明数据.如
    dim pVerfiyMsg as string * 10