Codice:
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const CREATE_NEW = 1
Const CREATE_ALWAYS = 2
Const OPEN_EXISTING = 3
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'La costante sotto la puoi cambiare per aumentare il numero masismo di byte
Const BYTE_PER_MSG = 16
'Serve solo per simualare l'invio
Private Sub Send(data As Byte)
MsgBox "Byte: " + Str(Int(data))
End Sub
Private Sub SendMsg(num As Long, buf() As Byte)
'Supponi di avere la tua sub che invia un byte alla volta e che si chiami Send
'La prima cosa che bisogna fare č inviare la dimensione del pacchetto
'Gli interi sono 4 byte e di conseguenza vanno scomposti in 4 pacchetti
Dim tmp As Byte, I As Long
tmp = (num And &HFF000000) / &H1000000
Send tmp
tmp = (num And &HFF0000) / &H10000
Send tmp
tmp = (num And &HFF00) / &H100
Send tmp
tmp = num And &HFF
Send tmp
'Per ricostruire il long basta fare in questo modo:
'Dim num As Long, tmp As Byte
'Recv tmp
'num = Int(tmp) * &H1000000
'Recv tmp
'num = num + Int(tmp) * &H10000
'Recv tmp
'num = num + Int(tmp) * &H100
'Recv tmp
'num = num + Int(tmp)
For I = 1 To num
Send buf(I)
Next I
End Sub
Private Sub Command1_Click()
Dim buffer(BYTE_PER_MSG) As Byte, f As Long, read As Long
f = CreateFile("nomefile.txt", GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, 0, 0)
If f = -1 Then
MsgBox "Errore nell'apertura del file !!!"
Else
Do
ReadFile f, buffer(1), BYTE_PER_MSG, read, ByVal 0&
MsgBox "Byte letti: " + Str(read)
'Ora richiamo la Sub che invia i dati
SendMsg read, buffer
Loop While read > 0
CloseHandle f
End If
End Sub
Crea un file nomefile.txt nella stessa directory del progetto...
Ricordati che il file č finito quando ricevi un pacchetto con contatore uguale a 0 (ed ovviamente 0 byte che lo seguono)...
Per creare un file in cui scrivere :
CreateFile(nomefile, GENERIC_WRITE, FILE_SHARE_READ, ByVal 0&, CREATE_ALWAYS, 0, 0)
Attento che sovrascrive i file giā esistenti...
Per scriverci WriteFile e funziona alla stesza maniera della ReadFile...