int OpenTSAP(char *serverID,char *loginID,char *passwd,char *errmsg)
若成功,返回1,若失败,返回0,并且在errmsg里写上具体错误信息。errmsg由VB提供的字符串缓存区,空间应该在100个字节以上。

解决方案 »

  1.   

    Public Declare Function OpenTSAPI Lib "acdstatus.dll" ( _
        ByRef serverID As Byte, ByRef loginID As Byte, ByRef password As Byte, _
        ByRef errmsg As Byte) As Integer
    这样可以吗?
      

  2.   

    将所有的指针都声明为as long
      

  3.   

    暴风雨:传进去的也要是LONG类型才可以.可是参数是STRING类型,不是数字的.
      

  4.   

    Public Declare Function OpenTSAPI Lib "acdstatus.dll" ( _
        ByRef serverID As Byte, ByRef loginID As Byte, ByRef password As Byte, _
        ByRef errmsg As Byte) As Integer
    这样可以吗?你之样调用dim sServerID  AS string
    dim sLoginID   AS string
    dim sPassword    AS string
    dim sErrMsg    AS stringdim iResult as integersServerID  =space(100)
    sLoginID   =space(100)
    sPassword    =space(100)
    sErrMsg    =space(100)iResult =OpenTSAPI(sServerID ,sLoginID ,sPassword ,sErrMsg )调用之前一定要给字符分配一定的空间,因为是按地址调用...
    space(100)你可以根据你的DLL里面的来定
      

  5.   

    //传进去的也要是LONG类型才可以.可是参数是STRING类型,不是数字的.可以把字串的地址传过去(用字串的话,这个地址可由strptr函数获得,用byte数组的话,用varptr获得数组第1个元素的地址后,把它传过去)
      

  6.   

    char *loginID  byval loginID as string 传值,调用时分配空间
      

  7.   

    C里的是字符指针,应该是指向一个以Null结尾字符串。在VB中,应该申明为以Byval方式传递的String,因为VB中的字符串变量(变长的)实际存的就是字符串的指针。
    Function OpenTSAP(Byval serverID As String,Byval loginID As String,Byval passwd As String,Byval errmsg As String) As Long
    楼上的两三颗星的,可不要误导他人哦。另rainstormmaster(暴风雨 v2.0) :Strptr函数取得字符串的地址不如Byval来的保险。
      

  8.   

    Public Declare Function OpenTSAP Lib "statue.dll" ( _
                        ByVal serverID As String, ByVal byvalloginID As String, ByVal password As String, _
                        ByVal errmsg As String) As Long
    Dim a as long
    Dim strerr As String
    Dim serverID As String
    Dim logid As String
    Dim passw As Stringa = OpenTSAPI(serverID, logid, passw, strerr)运行后提示:DLL调用约定错误,错误号:49
      

  9.   

    a = OpenTSAP(serverID, logid, passw, strerr)
      

  10.   

    ////运行后提示:DLL调用约定错误,错误号:49这个不好办了,这个dll的调用约定不是  _stdcall,
    如果你有dll的源代码,可以改就好办了
    int _stdcall  OpenTSAP(char *serverID,char *loginID,char *passwd,char *errmsg)如果没有源代码,那就等高人来用 VB 给平衡堆栈吧,我也爱莫能助。而且你的楼上的楼上的代码也有点问题,加一句
    strerr=space(100)'分配空间
      

  11.   

    我有个想法,你可以试试,C中*代表一个指针,而chr *应该是指向字符类型的指针,如果要与VB中的数据类型对应,那么就只有Long了,不过我不知道你这个函数是做什么的,如果是通过这些参数向函数内传递值,那么使用long类型的变量是不可以的。若是返回值似乎还可以考虑一下。因此,建议你将其声明为any,这样可以避开类型检查。
    在使用时,可以参考使用CopyMemory函数的方法,有一点应该是可以肯定的,这参数是按值(Byval)传递,而绝非按地址传递。这似乎不是一两句可以给出单一答案的问题,网上关于copymemort函数使用的介绍非常多,你可以参考一下。