alve,
c'è qualcuno che mi puo aiutare a capire dove sta l'errore in questo frammento di codice.
Dim byteReaded2 As UInt32 'Crea variabile unsigned per ricevere la quantità di byte letti
Dim n As Integer = 27 'Variabile costante per i settori
Dim data(2352 * n - 1) As Byte 'Crea variabile data dove riceve i byte significativi della traccia
Dim ptrData As IntPtr = Marshal.AllocHGlobal(2352 * n - 1) 'Crea puntatore delle dimensioni della variabile data
Dim tPositionSector As UInt32 = tStartSector 'Crea variabile di posizionamento settore impostando lo start
While (tPositionSector + n < tEndSector) 'Esegue ciclo fino al raggiungimento del valore di fine settore
Dim RAW_READ_INFO1 As RAW_READ_INFO 'Crea variabile con oggetto struttura
RAW_READ_INFO1.TrackMode = 2 'Popola la variabile con codice per la traccia Audio CDDA
RAW_READ_INFO1.DiskOffset.LowPart = tPositionSector * 2048 'popola la variabile con il valore del campo di partenza
RAW_READ_INFO1.SectorCount = n 'popola la variabile con il numero del settore
Dim ptrInfo As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(RAW_READ_INFO1)) 'Crea puntatore alla variabile allocando la dimensione
Marshal.StructureToPtr(RAW_READ_INFO1, ptrInfo, False) 'Riferiment al puntatore della variabile
Dim ret1 As Int16 = DeviceIoControl(hCDDrive, IOCTL_CONSTANTS.IOCTL_CDROM_RAW_READ, ptrInfo, Marshal.SizeOf(RAW_READ_INFO1), ptrData, RAW_SECTOR_SIZE * n - 1, byteReaded2, IntPtr.Zero) 'Chiamata del controllo
If ret1 <> 0 Then 'Gestione del messaggio di ritorno
Marshal.Copy(ptrData, data, 1, RAW_SECTOR_SIZE * n) 'Aggiorna la variabile data dai valori puntati
Else 'Altrimenti
MessageBox.Show("Cannot read INFO!") 'Mostra errore se ritorna messaggio 0
End If 'Fine condizione
Marshal.FreeHGlobal(ptrInfo) 'Lebera il puntatore
tPositionSector = tPositionSector + n 'Avanza la posizione di lettura
End While 'Fine Ciclo
Mi ritorno sempre errore!!! 'Errore dato nella lettura
Dim ret1 As Int16 = DeviceIoControl(hCDDrive, IOCTL_CONSTANTS.IOCTL_CDROM_RAW_READ, ptrInfo, Marshal.SizeOf(RAW_READ_INFO1), ptrData, RAW_SECTOR_SIZE * n - 1, byteReaded2, IntPtr.Zero) 'Chiamata del controllo
Grazie.
Marcello
|