vb读扇区问题

张3李4 2010-06-25 06:40:41

当扇区超过20万是就不可以读取了~~!

Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long

count=200000 * 512
Call ReadFile(hDevice, buffer(0), count, hadRead, ByVal 0&)

麻烦各位高手指点~~!
谢谢了~~!
...全文
748 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
请叫我黎小白 2013-02-20
  • 打赏
  • 举报
回复
解决了么,能给下代码么。
请叫我黎小白 2013-02-20
  • 打赏
  • 举报
回复
能这么读么, 读不了啊。能共享一下代码么?361856299@qq.com
zhanghao810810 2010-08-30
  • 打赏
  • 举报
回复
帮顶一下。。。
张3李4 2010-07-06
  • 打赏
  • 举报
回复
Private Sub Command2_Click()
Lts.Caption = "正在数据恢复..."
Dim hDevice As Long
Dim hadRead As Long

Dim ii As Double
Dim i As Double

Dim buffer() As Byte


Dim mfile As String, mfile2 As String
Dim buff() As Byte


mfile = App.Path + "\Image.bin"

ii = FileLen(mfile)
ReDim buffer(ii)

Tsq.Text = ii / L4.Caption

ReDim buff(ii)

Open mfile For Binary As #1
Get #1, , buff
Close #1

For i = 1 To ii
buffer(i) = buff(i - 1)
Next


hDevice = CreateFile("\\.\" & tdisk1.Text, GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0&, 0&)

If hDevice <> -1 Then



Call WriteFile(hDevice, buffer(1), ii, hadRead, ByVal 0&)



End If


If Check1.Value = 1 Then
Call DismountVolume
End If
Call CloseHandle(hDevice)

Lts.Caption = "数据恢复完成!!."

End Sub
Public Function OpenDisk(ByVal FileName As String) As Boolean

'// 打开磁盘

hDisk = CreateFile(FileName, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)

OpenDisk = Not (hDisk = INVALID_HANDLE_VALUE)

End Function

Public Function CloseDisk() As Boolean

'//关闭磁盘

CloseDisk = CloseHandle(hDisk)

End Function

Public Function GetDiskGeometry() As Boolean

'//获取磁盘参数

Dim dwOutBytes As Long

Dim bResult As Boolean

bResult = DeviceIoControl(hDisk, IOCTL_DISK_GET_DRIVE_GEOMETRY, ByVal 0&, 0, lpGeometry, Len(lpGeometry), dwOutBytes, ByVal 0&)

If bResult Then lBufferSize = lpGeometry.BytesPerSector * lpGeometry.SectorsPerTrack

GetDiskGeometry = bResult

End Function

Public Sub GetDiskInfo(MediaType As Long, Cylinders As Long, TracksPerCylinder As Long, SectorsPerTrack As Long, BytesPerSector As Long)

'//返回磁盘的参数

MediaType = lpGeometry.MediaType

Cylinders = lpGeometry.Cylinders.lowpart

TracksPerCylinder = lpGeometry.TracksPerCylinder

SectorsPerTrack = lpGeometry.SectorsPerTrack

BytesPerSector = lpGeometry.BytesPerSector

End Sub

Public Property Get BufferSize() As Long

'//返回每次读/写的缓冲大小

BufferSize = lBufferSize

End Property
Public Function DismountVolume() As Boolean
'// 将卷卸下,使系统重新辨识磁盘,等效于重新插盘
Dim dwOutBytes As Long
Dim bResult As Boolean

bResult = DeviceIoControl(hDisk, _
FSCTL_DISMOUNT_VOLUME, _
ByVal 0&, 0, _
ByVal 0&, 0, _
dwOutBytes, _
ByVal 0&)
DismountVolume = bResult
End Function

Public Function LockVolume() As Boolean
'// 将卷锁定
Dim dwOutBytes As Long
Dim bResult As Boolean

bResult = DeviceIoControl(hDisk, _
FSCTL_LOCK_VOLUME, _
ByVal 0&, 0, _
ByVal 0&, 0, _
dwOutBytes, _
ByVal 0&)
LockVolume = bResult
End Function
Public Function UnlockVolume() As Boolean
'// 将卷解锁
Dim dwOutBytes As Long
Dim bResult As Boolean

bResult = DeviceIoControl(hDisk, _
FSCTL_UNLOCK_VOLUME, _
ByVal 0&, 0, _
ByVal 0&, 0, _
dwOutBytes, _
ByVal 0&)
UnlockVolume = bResult
End Function

Private Sub lvButtons_H1_Click()
tDisk.Clear
Dim strDriveBuffer As String
Dim strDrives As String
Dim i As Long
Dim udtInfo As DEVICE_INFORMATION
Dim ii As Integer

strDriveBuffer = Space(240)
strDriveBuffer = Left$(strDriveBuffer, GetLogicalDriveStrings(Len(strDriveBuffer), strDriveBuffer))

For ii = 1 To 24
strDrives = "PHYSICALDRIVE" & ii

udtInfo = GetDevInfo(strDrives)

If udtInfo.Valid Then
Select Case udtInfo.BusType
Case BusTypeUsb: tDisk.AddItem "" & strDrives & "\" & "USB\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusType1394: tDisk.AddItem "" & strDrives & "\" & "1394\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeAta: tDisk.AddItem "" & strDrives & "\" & "ATA\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeAtapi: tDisk.AddItem "" & strDrives & "\" & "ATAPI\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeFibre: tDisk.AddItem "" & strDrives & "\" & "FIBRE\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeRAID: tDisk.AddItem "" & strDrives & "\" & "RAID\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeScsi: tDisk.AddItem "" & strDrives & "\" & "SCSI\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeSsa: tDisk.AddItem "" & strDrives & "\" & "SSA\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeUnknown: tDisk.AddItem "" & strDrives & "\" & "Unknown\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)

End Select


End If
Next

tDisk.Text = ""
End Sub

Private Sub tDisk_Change()
vt = InStr(tDisk.Text, "\")

If tDisk.Text <> "" Then
tdisk1.Text = Mid(tDisk.Text, 1, vt - 1)
Call diskinfo
End If
End Sub

张3李4 2010-07-06
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim strDriveBuffer As String
Dim strDrives As String
Dim i As Long
Dim udtInfo As DEVICE_INFORMATION
Dim ii As Integer

strDriveBuffer = Space(240)
strDriveBuffer = Left$(strDriveBuffer, GetLogicalDriveStrings(Len(strDriveBuffer), strDriveBuffer))

For ii = 1 To 24
strDrives = "PHYSICALDRIVE" & ii

udtInfo = GetDevInfo(strDrives)

If udtInfo.Valid Then
Select Case udtInfo.BusType
Case BusTypeUsb: tDisk.AddItem "" & strDrives & "\" & "USB\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusType1394: tDisk.AddItem "" & strDrives & "\" & "1394\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeAta: tDisk.AddItem "" & strDrives & "\" & "ATA\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeAtapi: tDisk.AddItem "" & strDrives & "\" & "ATAPI\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeFibre: tDisk.AddItem "" & strDrives & "\" & "FIBRE\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeRAID: tDisk.AddItem "" & strDrives & "\" & "RAID\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeScsi: tDisk.AddItem "" & strDrives & "\" & "SCSI\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeSsa: tDisk.AddItem "" & strDrives & "\" & "SSA\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)
Case BusTypeUnknown: tDisk.AddItem "" & strDrives & "\" & "Unknown\" & Trim$(udtInfo.VendorID) & Trim$(udtInfo.ProductID)

End Select


End If
Next

tDisk.Text = ""
End Sub


Private Sub Command1_Click()

Lts.Caption = "正在备份数据..."

Dim hDevice As Long
Dim hadRead As Long

hDevice = CreateFile("\\.\" & tdisk1.Text, GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0&, 0&)


Call diskinfo

Dim mfile As String, mfile2 As String

Dim buffer() As Byte

Dim count As Long
Dim count1 As Long
count = Tsq.Text
count1 = L4.Caption

count = count * count1

ReDim buffer(count)

' Dim buffer(1 To 512000) As Byte




Open "Image.bin" For Binary As #1
' Open "Image.bin" For Output As #1

If hDevice <> -1 Then



Call ReadFile(hDevice, buffer(1), count, hadRead, ByVal 0&) '//(****)

' Dim ii As Long
' For ii = 1 To count

Put #1, , buffer()
' Next


Close #1

Call CloseHandle(hDevice)
Lts.Caption = "数据备份完成!"

End If


End Sub

Private Sub diskinfo()
Dim a As Variant
Dim b As Long
Dim C As Variant
Dim d As Variant

'\\.\PHYSICALDRIVE0 为第一个硬盘
'\\.\c: 为C盘 '\\.\D:为D盘
'其他的盘和分区改数字就好了

OpenDisk ("\\.\" & tdisk1.Text)

Dim MediaType, Cylinders, TracksPerCylinder, SectorsPerTrack, BytesPerSector As Long
a = GetDiskGeometry()

MediaType = lpGeometry.MediaType
Cylinders = lpGeometry.Cylinders.lowpart
TracksPerCylinder = lpGeometry.TracksPerCylinder
SectorsPerTrack = lpGeometry.SectorsPerTrack
BytesPerSector = lpGeometry.BytesPerSector


L6.Caption = lpGeometry.MediaType
L1.Caption = lpGeometry.Cylinders.lowpart
L2.Caption = lpGeometry.TracksPerCylinder
L3.Caption = lpGeometry.SectorsPerTrack
L4.Caption = lpGeometry.BytesPerSector


b = lpGeometry.Cylinders.lowpart * lpGeometry.TracksPerCylinder
C = lpGeometry.SectorsPerTrack * lpGeometry.BytesPerSector
d = Format((C * b) / 1000000000, 0#)
L5.Caption = d & "GB"
CloseDisk
End Sub
张3李4 2010-07-06
  • 打赏
  • 举报
回复
Private Declare Function GetDriveTypeStr Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
'-----------------------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------------------
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const OPEN_EXISTING = 3

'//为了简单起见,注意下面的声明语句部分地方已经改动过
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _
(ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, _
lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long

Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, _
ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long




Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long



Private Const INVALID_HANDLE_VALUE = -1

'//file seek

Private Const FILE_BEGIN = 0

Private Const FILE_CURRENT = 1

Private Const FILE_END = 2

Private Const ERROR_SUCCESS = 0&

'//device io control

Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long

Private Const IOCTL_DISK_GET_DRIVE_GEOMETRY As Long = &H70000 '458752

Private Const IOCTL_STORAGE_GET_MEDIA_TYPES_EX As Long = &H2D0C04

Private Const IOCTL_DISK_FORMAT_TRACKS As Long = &H7C018

Private Const FSCTL_LOCK_VOLUME As Long = &H90018

Private Const FSCTL_UNLOCK_VOLUME As Long = &H9001C

Private Const FSCTL_DISMOUNT_VOLUME As Long = &H90020

Private Const FSCTL_GET_VOLUME_BITMAP = &H9006F

'//type

Private Type LARGE_INTEGER

lowpart As Long

highpart As Long

End Type

Private Enum MEDIA_TYPE

Unknown

F5_1Pt2_512

F3_1Pt44_512

F3_2Pt88_512

F3_20Pt8_512

F3_720_512

F5_360_512

F5_320_512

F5_320_1024

F5_180_512

F5_160_512

RemovableMedia

FixedMedia

End Enum

Private Type DISK_GEOMETRY

Cylinders As LARGE_INTEGER

MediaType As MEDIA_TYPE

TracksPerCylinder As Long

SectorsPerTrack As Long

BytesPerSector As Long

End Type

'//private vars

Private hDisk As Long 'disk handle

Private lpGeometry As DISK_GEOMETRY 'disk info

Private lBufferSize As Long 'the buffer size of read/write
lb_bn 2010-07-06
  • 打赏
  • 举报
回复
帮顶一下。。。
张3李4 2010-07-06
  • 打赏
  • 举报
回复
我根据在网络上找的代码写了,只可读出100M左右的扇区数据,超过了就不可以了,就是不知道怎么读写硬盘末尾那些扇区~~!那位大哥能指点指点~~!小弟拜谢了~~!
舉杯邀明月 2010-06-26
  • 打赏
  • 举报
回复
老马,失误了吧…………

嗷嗷叫的老马 2010-06-25
  • 打赏
  • 举报
回复
count=200000 * 512

//

count=clng(200000) * clng(512)
舉杯邀明月 2010-06-25
  • 打赏
  • 举报
回复
‘读扇区’???

不知道你的 hFile 是如何得到的。
20W*512,也就是 10K 的扇区数据,数据不算多,应该没有问题吧。

就是不知道你的‘缓冲区’是否‘正确开辟’了那么大的存贮空间。
嗷嗷叫的老马 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chen8013 的回复:]
引用 2 楼 myjian 的回复:
count=200000 * 512

//

count=clng(200000) * clng(512)



count=200000 * 512 与 count=clng(200000) * clng(512) 有区别吗?
[/Quote]
VB默认是Integer,不做那种强制转换会溢出
舉杯邀明月 2010-06-25
  • 打赏
  • 举报
回复
1F 应该是 ‘100K 的扇区数据’。

舉杯邀明月 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 myjian 的回复:]
count=200000 * 512

//

count=clng(200000) * clng(512)
[/Quote]


count=200000 * 512 与 count=clng(200000) * clng(512) 有区别吗?
a1875566250 2010-06-25
  • 打赏
  • 举报
回复
首先不明白LZ想要干什么
!病毒攻杀编程技术资料!.rar [ActiveProcessLinks] [DKOM保护进程] [DKOM进程保护] [DKOM隐藏进程] [DLL注入] [FcOpenProcess] [FlowerBellGetProcess] [FTP上传下载文件] [NtQueryDirectoryFile枚举文件和文件夹] [NtSysDbgCtrl查看进程模块] [PE导出输入表演示(文件影射版)] [PE导出输入表演示(文件版)] [PE导出输入表演示(进程版)收藏] [Ping指令类模块] [Ring0删除文件] [Ring3 Inline Hook NtTerminateProcess] [Ring3 Inline Hook Scan] [RUNDLL32使用方法] [Shadow SSDT] [SSTD] [VB中基于TCPIP协议的点对点文件传输代码] [Windows Script Host] [下载文件] [二进制文件写] [从内存启动程序(可能导致蓝屏)] [使用别的程序终止进程] [修改内核数据] [修改文件时间] [修改程序图标] [修改键盘按键] [关于注册表的API] [关闭进程窗口] [内存填中断杀进程] [内存填零杀进程] [创建SYSTEM用户进程] [动态API(绕过 三环钩子)] [双进程保护] [双进程保护2] [发送按键] [发送邮件] [取得系统语言] [取得进程] [变相执行EXE] [可以利用的程序(进程保护+中止进程)] [向DOS窗口发送文字] [启动暂停系统服务] [处理Ctrl+Alt+Del系统热键] [多线程执行] [大文件MD5验证] [完整病毒(内含驱动杀进程)] [完整的API钩子] [屏蔽 NT 系统的下所有按键消息] [常规方式枚举进程(PSAPI)] [延时(低CPU占用)] [建立和删除用户] [强制文件夹重命名] [得到EXE图标] [得到本机IP地址] [得到进程命令行] [得到进程父ID] [得到进程的模块] [得到进程的线程] [快速更改分辨率程序] [快速格式化] [快速蓝屏] [恢复Inline-Hook(Only XP SP2)] [挂起进程] [控制远程计算机] [控制鼠标] [数字签名验证] [文件占坑防止删除] [文件捆绑] [文件校验] [映像劫持] [枚举消息钩子] [枚举线程] [枚举进程(PID+EPROCESS)] [枚举进程的线程(TID+ETHREAD)] [查找窗口并设置标题(消息炸弹)] [检查网络连接] [检测U盘插入+自动复制指定文件] [检测内核模块] [炉子的进程管理器] [用外部的VB代码控制内部程序] [病
******************************************************************************* * * * 摘 要: 本程序主要是通过调用MF1_AnLock2009.dll动态连接库函数,进行写卡操作 * * * * 创建日期: 2006年07月19日 * 修改日期: 2009年02月17日 * * ******************************************************************************** //********************************************************** //************************************* //******************* //MF1卡通用接口 //******************* //************************************* //********************************************************** //****************************** * 返回值说明 : 整型(Integer) * -1 ---- 串口打开失败 * -2 ---- 无效卡片 * -3 ---- 软件未注册 * 0 ---- 写卡失败 * 1 ---- 成功 //****************************** function UGA_ModiPSW ( CommID :Integer; MF_Area :Byte; OldPSW, NewPSW :PChar ) : Integer; 功能: 修改分密码 参数: CommID 端口号(1-4) MF_Area MF1号(0-15) OldPSW 旧密码(最大长度6字节) NewPSW 新密码(最大长度6字节) function UGA_ReadCard( CommID :Integer; MF_Area :Byte; CurrPSW, CardCode, CardInfo :PChar ) : Integer; 功能: 卡片信息 参数: CommID 端口号(1-4) MF_Area MF1号(0-15) CurrPSW 当前密码(最大长度6字节) CardCode 出的卡号(固定8字节) CardInfo 出的卡片信息(16字节 * 3扇 = 48字节) function UGA_WriteCard( CommID :Integer; MF_Area :Byte; CurrPSW, CardInfo :PChar ) :Integer; 功能: 卡片信息 参数: CommID 端口号(1-4) MF_Area MF1号(0-15) CurrPSW 当前密码(最大长度6字节) CardInfo 写入的卡片信息(16字节 * 3扇 = 48字节) //********************************************************** //************************************* //******************* //MF1卡门锁专用接口 //******************* //************************************* //********************************************************** ************************************************************** * 函数功能 : 取卡片信息 * 参数说明 : CommID(整型) ---- 端口编号 * CardType(整型) ---- 卡片类型(0是T5557卡,1是MF1卡) * MF1_Area(整型) ---- MF1卡片分号(取值范围2-15) * 返回值说明 : 通用字符串型(PChar) * (1)未成功取时 * -1 ---- 串口打开失败 * -2 ---- 卡片无效 * 0 ---- 数据失败 * 1 ---- 分设置成功但不能正常取数据(只在MF1卡时出现,可能由于该分未初始化) * (2)成功取时 * 卡号,卡类型 ---- 取非宾客卡时的返回值,以英文逗号分隔 * 卡号,卡类型,楼栋号,楼层号,房间号,套间号,开始时间,结束时间,开特权门标记 ---- 取宾客卡时的返回值,以英文逗号分隔 * 卡类型说明: * 0 ---- 空卡 , 1 ---- 新宾客卡 , 2 ---- 复制宾客卡 , 3 ---- 后备宾客卡 , * 4 ---- 宾客终止卡 , 5 ---- 反宾客终止卡 , 6 ---- 挂失卡 , 7 ---- 取消挂失卡 , * 8 ---- 楼栋卡 , 9 ---- 楼层卡 , 10 ---- 授权卡 , 11 ---- 锁体设置卡 , * 12 ---- 特权设置卡 , 13 ---- 房间设置卡 , 14 ---- 总卡 , 15 ---- 应急卡 , * 16 ---- 时钟卡 , 17 ---- 锁体信息卡 , 18 ---- 房间清除卡 , 19 ---- 初始化数量卡 , * 20 ---- 开锁数据卡 * 开特权门标记说明: * 1 ---- 有特权 , 0 ---- 无特权 ************************ Delphi 调用 ************************* * function ReadCardInfo(CommID : Integer; CardType : Integer; MF1_Area : Byte ) : PChar; external 'MF1_AnLock2009.dll'; stdcall; ************************************************************** * ************************* VB 调用 **************************** * Private Declare Function ReadCardInfo Lib "MF1_AnLock2009.dll" _ * (ByVal CommID As Long, ByVal CardType As Long, Optional ByVal MF1_Area As Long ) As String * ************************************************************** * ************************* PB 调用 **************************** * Function String ReadCardInfo( long CommID , long CardType , long MF1_Area ) Library "MF1_AnLock2009.dll"; ************************************************************** 例1: 假设端口号为3,当卡片为T5557卡时以ReadCardInfo(3,0,15)调用 当卡片为MF1卡,分号为2时以ReadCardInfo(3,1,2)调用 例2: 当串口打开失败时,函数返回值: -1 例3: 当取卡号为234D833A78的总卡时,函数返回值: 234D833A78,14 例4: 当取卡号为234D833A78、楼栋号为2、楼层号为10、房间号为10101、套间号为3、开始时间为2007-10-10 12:20:23、 结束时间为2007-10-11 12:00:08的可开特权门的新宾客卡时, 函数返回值:234D833A78,1,2,10,10101,3,2007-10-10 12:20:00,2007-10-11 12:00:00,1 ************************************************************** ************************************************************** * 函数功能 : 写宾客卡信息 * 参数说明 : * CommID(整型) ---- 端口编号 * CardType(整型) ---- 卡片类型(0是T5557卡,1是MF1卡) * OldKeyEnd(整型) ---- 制新宾客卡设置1,BAKKey参数设置0;制复制宾客卡设置0,BAKKey参数设置0; * BAKKey(整型) ---- 制后备宾客卡设置1,OldKeyEnd参数设置为0 * TSRight(整型) ---- 可开特权门设置1,不允许开特权门设置0 * FloorCode(长整型) ---- 楼栋号(1-255) * FloorLayCode(长整型) ---- 楼层号(1-255) * RoomCode(长整型) ---- 房间号(1-65535) * iSubRoomCode(长整型) ---- 套间号(1-255),当没有套间房时请设置为255 * StartDateTime(通用字符串型) ---- 宾客卡起始时间(起始日期时间),20字符长度,格式'yyyy-mm-dd hh:nn:ss' * EndDateTime(通用字符串型) ---- 宾客卡有效时间(截止日期时间),20字符长度,格式'yyyy-mm-dd hh:nn:ss' * MF1_Area(整型) ---- MF1卡片分号(取值范围2-15) * 返回值说明 : 整型(Integer) * -1 ---- 串口打开失败 * -2 ---- 无效卡片 * -3 ---- 软件未注册 * 0 ---- 写卡失败 * 1 ---- 成功 ********************** Delphi 调用 *************************** * function WriteGuestCard( CommID : Integer; CardType : Integer; * OldKeyEnd, BAKKey, TSRight :Integer; * FloorCode, FloorLayCode, RoomCode, iSubRoomCode :Cardinal; * StartDateTime :PChar; EndDateTime :PChar; MF1_Area :Byte ) :Integer; * external 'MF1_AnLock2009.dll'; stdcall; ************************************************************** * ************************* VB 调用 **************************** * Private Declare Function WriteGuestCard Lib "MF1_AnLock2009.dll" _ * (ByVal CommID As Long, ByVal CardType As Long, _ * ByVal OldKeyEnd As Long, ByVal BAKKey As Long, ByVal TSRight As Long, _ * ByVal FloorCode As Long, ByVal FloorLayCode As Long, ByVal RoomCode As Long, ByVal iSubRoomCode As Long, _ * ByVal StartDateTime As String, ByVal EndDateTime As String, Optional ByVal MF1_Area As Long ) As Long ************************************************************** * ************************* PB 调用 **************************** * Function long WriteGuestCard( long CommID, long CardType, * long OldKeyEnd, long BAKKey, long TSRight, * ulong FloorCode, ulong FloorLayCode, ulong RoomCode, ulong iSubRoomCode, * REF string StartDateTime, REF string EndDateTime, long MF1_Area) Library "MF1_AnLock2009.dll"; ************************************************************** 以下例子中都以端口编号设置3、楼栋号设置2、楼层号设置10、房间号设置10101、套间号设置3、起始时间设置2007-10-10 12:00:00、有效时间设置2007-10-11 12:00:00为例 在MF1卡的调用中假设分号为2 例1: 写可开特权门的新宾客卡 T5557调用方式: WriteGuestCard(3,0,1,0,1,2,10,10101,3,2007-10-10 12:00:00,2007-10-11 12:00:00,15) MF1调用方式 : WriteGuestCard(3,1,1,0,1,2,10,10101,3,2007-10-10 12:00:00,2007-10-11 12:00:00,2) 例2: 写不可开特权门的复制宾客卡 T5557调用方式: WriteGuestCard(3,0,0,0,0,2,10,10101,3,2007-10-10 12:00:00,2007-10-11 12:00:00,15) MF1调用方式 : WriteGuestCard(3,1,0,0,0,2,10,10101,3,2007-10-10 12:00:00,2007-10-11 12:00:00,2) 例3: 写可开特权门的后备宾客卡 T5557调用方式: WriteGuestCard(3,0,0,1,1,2,10,10101,3,2007-10-10 12:00:00,2007-10-11 12:00:00,15) MF1调用方式 : WriteGuestCard(3,1,0,1,1,2,10,10101,3,2007-10-10 12:00:00,2007-10-11 12:00:00,2) ************************************************************** * 函数功能 : 回收卡片 * 参数说明 : CommID(整型) ---- 端口编号 * CardType(整型) ---- 卡片类型(0是T5557卡,1是MF1卡) * MF1_Area(整型) ---- MF1卡片分号(取值范围2-15) * 返回值说明 : 整型(Integer) * -1 ---- 串口打开失败 * 0 ---- 写卡失败 * 1 ---- 成功 ********************** Delphi 调用 *************************** * function ClearCardInfo ( CommID : Integer; CardType : Integer; MF1_Area :Byte ) : Integer; * external 'MF1_AnLock2009.dll'; stdcall; ************************************************************** * ************************* VB 调用 **************************** * Private Declare Function ClearCardInfo Lib "MF1_AnLock2009.dll" _ * (ByVal CommID As Long, ByVal CardType As Long, Optional ByVal MF1_Area As Long ) As Long ************************************************************** * ************************* PB 调用 **************************** * Function long ClearCardInfo ( long CommID, long CardType, long MF1_Area) Library "MF1_AnLock2009.dll"; ************************************************************** 例1: 假设端口号为3,当卡片为T5557卡时以ClearCardInfo(3,0,15)调用 当卡片为MF1卡,分号为2时以ClearCardInfo(3,1,2)调用

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧