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))这时实际得到的却只有第一个数据,不知道该如何处理
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))这时实际得到的却只有第一个数据,不知道该如何处理
我也用这个试过了了
在事件里面就写
st = MC_DownloadRoomData(iCnt, RoomInfo())但结果却是没有一个值传入进去
这个用过没有?vb的数组和c的数组不同.c的数组地址是第一个元素的地址,vb的不是这样,vb的数组是一个结构,结构里面的一个元素指向第一个元素.
我贴出来供大家参考啊先贴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)))