111,097
社区成员




Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Const USER_BRIEFINFO_SIZE As Long = 24
Dim UInfoArray(USER_BRIEFINFO_SIZE / 4 - 1) As Long
Private Sub cmdGetEnrollInfo_Click()
Dim nRet As Long
Dim i As Long, j As Long, k As Long
Dim szTemp As String, szTemp1 As String
Dim UInfoOne As USERINFO_FLAG_TYPE
lstEnrollInfo.Clear
nRet = frmMain.SB_APC1.ReadAllUserID_EXT()
lblMessage = pubGetErrorString
If nRet >= 0 Then
lstEnrollInfo.AddItem ("No. ID Priv Ena (FP1 ~ ~ ~ FP10) PW CD GT GV")
i = 0
While frmMain.SB_APC1.GetAllUserID_EXT(UInfoArray(0)) > 0
i = i + 1
CopyMemory UInfoOne, UInfoArray(0), USER_BRIEFINFO_SIZE
szTemp = Format(i, "000#") & " " & Format(UInfoOne.dwID, "0000#") & " "
Select Case UInfoOne.byMgr ' privilege
Case 1
szTemp1 = " U"
Case 6
szTemp1 = " M"
Case 7
szTemp1 = "SM"
Case Else
szTemp1 = "_"
End Select
szTemp = szTemp & szTemp1 & " "
If UInfoOne.bEnable = 0 Then ' enable
szTemp1 = "0"
Else
szTemp1 = "1"
End If
szTemp = szTemp & szTemp1 & " "
szTemp1 = ""
k = UInfoOne.dwUsedFlag
For j = 0 To 9 ' FP flag
If (k \ 2) Mod 2 = 1 Then
szTemp1 = szTemp1 & "1"
Else
szTemp1 = szTemp1 & "0"
End If
If k Mod 2 = 1 Then
szTemp1 = szTemp1 & "1."
Else
szTemp1 = szTemp1 & "0."
End If
k = k \ 4
Next j
szTemp = szTemp & szTemp1 & " "
szTemp1 = ""
If (k \ 2) Mod 2 = 1 Then ' Password flag
szTemp1 = "1"
Else
szTemp1 = "0"
End If
If k Mod 2 = 1 Then
szTemp1 = szTemp1 & "1"
Else
szTemp1 = szTemp1 & "0"
End If
szTemp = szTemp & szTemp1 & " "
szTemp1 = ""
k = k \ 4
If (k \ 2) Mod 2 = 1 Then ' Card flag
szTemp1 = "1"
Else
szTemp1 = "0"
End If
If k Mod 2 = 1 Then
szTemp1 = szTemp1 & "1"
Else
szTemp1 = szTemp1 & "0"
End If
szTemp = szTemp & szTemp1 & " "
If UInfoOne.byUseGroupTZ = 0 Then ' Use Group Time Zone
szTemp1 = "0"
Else
szTemp1 = "1"
End If
szTemp = szTemp & szTemp1 & " "
If UInfoOne.byUseGroupVM = 0 Then ' Use Group Verify Mode
szTemp1 = "0"
Else
szTemp1 = "1"
End If
szTemp = szTemp & szTemp1
lstEnrollInfo.AddItem (szTemp)
Wend
End If
End Sub
Public long GetAllUserID_EXT( long* pAllIDInfo );
这里返回的是一个数组首位的指针,这样在VB中UInfoArray数组就能够全部被赋值了。
但是在C#中 这个函数被声明为
public virtual int GetAllUserID_EXT(ref int pAllIDInfo)
这样只能取到数组首位的值,而无法取到全部的值。
由于本人才疏学浅,对指针这一部分不太了解,希望版主不吝赐教。