VC写的DLL里参数为结构体数组,在VB中怎么引用啊VC函数short __stdcall MC_DownloadRoomData(short roomCnt, ROOM_INFO *roomList);
roomList --  ROOM_INFO型数组,依次存放多个数据。我在VB中声明时
Public Declare Function MC_DownloadRoomData Lib "YXMakeCard.dll" (ByVal roomCnt As Integer, ByRef roomList As ROOM_INFO) As Integer
在窗口调用时
 Dim RoomInfo() As ROOM_INFO
   
    Dim iCnt As Integer
    iCnt = 1
    Erase RoomInfo
    ReDim RoomInfo(100)
    RoomInfo(0).RoomName = "firstRoom"
    RoomInfo(0).RoomNo = "001.001.001"
    RoomInfo(0).Flags = 1
    RoomInfo(0).RFU = "REMARK"
    Dim Inis As Long
    For index = 1 To 99
        appName = "ROOM"
        strTemp = GetStr(3, index)
        keyName = "room" + strTemp
        Inis = GetPrivateProfileString(appName, keyName, 22, dstString, 256, App.Path + "\RoomData.ini")
        If Mid(dstString, 1, 2) <> "22" Then
            RoomInfo(index).RoomNo = dstString
            RoomInfo(index).Flags = 1
            RoomInfo(index).RFU = "REMARK"
            RoomInfo(index).RoomName = keyName
            iCnt = iCnt + 1
        End If
    Next
    st = MC_DownloadRoomData(iCnt, RoomInfo(0))这时实际得到的却只有第一个数据,不知道该如何处理

解决方案 »

  1.   

    ByRef roomList() As ROOM_INFO'这个才是数组。
      

  2.   


    我也用这个试过了了
    在事件里面就写
      st = MC_DownloadRoomData(iCnt, RoomInfo())但结果却是没有一个值传入进去
      

  3.   

    st = MC_DownloadRoomData(iCnt, addressof RoomInfo(0))
    这个用过没有?vb的数组和c的数组不同.c的数组地址是第一个元素的地址,vb的不是这样,vb的数组是一个结构,结构里面的一个元素指向第一个元素.
      

  4.   

    我终于测试出来了
    我贴出来供大家参考啊先贴VC的原型:
    //  数据结构体 struct ROOM_INFO{
        char    RoomNo[20];             //  字符串, 6个字符,可以包括套间号
        char    RoomName[17];           //   字符串, 最多16个字符(或8个中文)
        short   Flags;                  // 
        char    RFU[3];                 // 预留
    };short __stdcall Mifare_DownloadRoomData(short roomCnt, ROOM_INFO *roomList)
     roomList --  ROOM_INFO型数组,依次存放多个数据。在VB中
    Type ROOM_INFO ' 数据结构体 
       RoomNo(1 To 20)   As Byte '字符串,6个字符,可以包括套间号
        RoomName(1 To 17)    As Byte '最多16个字符或8个汉字 要用BYTE型且下标从1开始
        Flags   As Integer
        RFU(1 To 3)       As Byte '预留
    End Type声明
    Public Declare Function MC_DownloadRoomData Lib "XX.dll" (ByVal roomCnt As Integer, ByVal roomList As Long) As Integer在页面事件中使用
    Dim RoomInfo(100) As ROOM_INFO
        Dim appName As String '--节名
        Dim keyName As String '--字段
        Dim dstString As String '--key值
        Dim nBufLength As Integer
        Dim index As Integer
        Dim strTemp As String
        
        Dim iCnt As Integer
        Dim Inis As Long
        
        Dim indexs As Integer
        
        
         
          
         
         
        iCnt = 1
        dstString = String(255, 0)
     
        RoomInfo(0).RoomNo(1) = 48
        RoomInfo(0).RoomNo(2) = 48
        RoomInfo(0).RoomNo(3) = 49
        RoomInfo(0).RoomNo(4) = 46
        RoomInfo(0).RoomNo(5) = 48
        RoomInfo(0).RoomNo(6) = 48
        RoomInfo(0).RoomNo(7) = 51
        RoomInfo(0).RoomNo(8) = 46
        RoomInfo(0).RoomNo(9) = 48
        RoomInfo(0).RoomNo(10) = 48
        RoomInfo(0).RoomNo(11) = 48
        RoomInfo(0).RoomNo(12) = 48
        RoomInfo(0).RoomNo(13) = 51
        RoomInfo(0).RoomNo(14) = 46
        RoomInfo(0).RoomNo(15) = 65
      
       
      
     RoomInfo(1).RoomNo(1) = 48
        RoomInfo(1).RoomNo(2) = 48
        RoomInfo(1).RoomNo(3) = 49
        RoomInfo(1).RoomNo(4) = 46
        RoomInfo(1).RoomNo(5) = 48
        RoomInfo(1).RoomNo(6) = 48
        RoomInfo(1).RoomNo(7) = 51
        RoomInfo(1).RoomNo(8) = 46
        RoomInfo(1).RoomNo(9) = 48
        RoomInfo(1).RoomNo(10) = 48
        RoomInfo(1).RoomNo(11) = 48
        RoomInfo(1).RoomNo(12) = 48
        RoomInfo(1).RoomNo(13) = 51
        RoomInfo(1).RoomNo(14) = 46
        RoomInfo(1).RoomNo(15) = 66 '这些值都是对应数据的AscII值    
        
        
        st = MC_DownloadRoomData(2, VarPtr(RoomInfo(0)))