BOOL SCL_SeekGetAItem(char *IP, char *Name);
入口:无
出口:若返回TRUE,IP中有给回应答的控制器的IP地址,Name中有控制器的助记名;返回FALSE表示没有得到控制器的应答。在VB中我是这样声明的
Public Declare Function SCL_SeekGetAItem Lib "XC.dll" (ByVal IP As String, ByVal Name As String) As Boolean调用后。我如何取的IP,和Name的值呢?????

解决方案 »

  1.   

    dim aa as String
    dim bb as String
    SCL_SeekGetAItem  aa,bb
    me.Caption=aa & " " & bb
      

  2.   

    我觉得你的声明可能有问题,感觉要传引用Public Declare Function SCL_SeekGetAItem Lib "XC.dll" (byref IP As String, Byref Name As String) As Boolean
      

  3.   

    ByVal IP As String, ByVal Name As String如果是要返回IP和NAME,一般硬挨是byref传递的。
      

  4.   

    char* 就是字符串,传字符串就行
      

  5.   

    Public Declare Function SCL_SeekGetAItem Lib "XC.dll" (byval IP As String, Byval Name As String) As long不行就是dll有问题或者不是stdcall的
      

  6.   

    没看清楚问题,不好意思
    byref 
      

  7.   

    byref ,运行后说是类型不匹配DLL是没有问题的
      

  8.   

    有个最先需要考虑的问题:传入的是个缓冲区,那就一定要是事先初始化好的.因此,你的声明应该是可以工作的,前提是函数里面没啥别的未知问题.但需要事先把字符串"搞大",分配点空间给它吧:dim sIP as string,sName as stringsip=space(255)    '分别分配255的长度
    sname=space(255)if SCL_SeekGetAItem(sip,sname) then
        msgbox sip & vbcrlf & sname
    end if
    如果不做长度分配,两个变量实际上是没有分配空间的,指针值为零.
    而你调用时居然没挂,说明DLL里对空指针作了处理,不然...
      

  9.   

    VB6里用的是COM的BSTR,在这个特殊情况下的用法正好是ByVal的....这个变量IP里面实际是一个指针,指向一个BSTR结构的实际字符串缓冲区的首地址,用ByVal传进去后,DLL中将正好得到这个指针,所以要在调用API时返回字符串,则需要ByVal方式传入,同时一定要分配好足够的长度.
    关于BSTR,这里说得稍多一点,还有个图,感兴趣的话可以看看http://www.m5home.com/bbs/forum.php?mod=viewthread&tid=2362&page=1#pid10233