Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Come usare unrar.dll

dovrei creare un'applicazione che scompatti un file rar con unrar.dll
direttamente dal menu che cereo
ciao e grazie

 direttamente dal menu che cereo
Lodevole iniziativa, degna di plauso.
Hai l'autorizzazione ad impegnartici.
Se hai qualche problema fatti sentire.

 ha scritto nel messaggio
news:89euhj$4c$1...@nslave2.tin.it...


 l'estrazione
Nello stesso modo che usi per creare la lista.
Si definiscono la struttura structRAR che indica la
modalità operativa e l'header del file corrente:
Dim structRAR As RAROpenArchiveData
Dim structHeader As RARHeaderData
Dim opStatus As Integer
   ' imposti i parametri base - nome file RAR e dimensione del buffer
   structRAR.ArcName = "NomeArchivioRAR"
   structRAR.CmtBuf = Space(16384)  ' sempre 16k
   structRAR.CmtBufSize = 1638          ' sempre 16k
   ' se devi ottenere la lista:
   structRAR.OpenMode = RAR_OM_LIST
   ' se devi estrarre un file:
   structRAR.OpenMode = RAR_OM_EXTRACT
   ' l'archivio RAR va aperto in una delle due modalità.
   ' per passare alla modalità alternativa occorre prima
   ' chiuderlo, altrimenti rende un errore 16 - Can't
   ' create file
   'imposti l'handle del file da aprire (o già aperto)
   ' passando alla funzione la struttura impostata
   hRAR = RAROpenArchive(structRAR)
   ' se è necessaria la password, va indicata prima che
   ' il processo abbia inizio; passi l'handle dell'archivio e
   ' stringa contenente la password:
    RARSetPassword hRAR, lpszPassword
    ' si inizializza lo stato dell'operazione: opStatus definisce
    ' in seguito se l'operazione è terminata (opStatus = 0)
    ' Il primo file della lista diventa il file corrente
     opStatus = RARReadHeader(hRAR, structHeader )
    ' quindi si cicla fino a che le operazioni non sono terminate
    ' NB: anche se il file da estrarre è uno solo, occorre
    ' passare tutto l'archivio.
    Do Until opStatus <> 0
       FileCorrente = Left$(structHeader.FileName, _
            InStr(structHeader.FileName, vbNullChar) - 1)
       ' Se il modo operativo è OP_EXTRACT
        If FileCorrente = FileDaDecomprimere
            ValoreDiRitorno = RARProcessFile(hRAR, _
                    RAR_EXTRACT, _
                    PathDiDestinazione, _
                    structHeader.FileName)
        Else
            ValoreDiRitorno = RARProcessFile(hRAR, RAR_EXTRACT, "", "")
        End  If
       ' Se il modo operativo è OP_LIST
        ValoreDiRitorno = RARProcessFile(hRAR, _
                                     RAR_SKIP, "", "")
         If ValoreDiRitorno <> 0 Then
             'Errore riportato in ValoreDiRitorno
         Else
            ' Se l'operazione è andata a buon fine si aggiungere alla
            ' lista o alla griglia il nome del file e altri dettagli registrati
            ' in structHeader, ad esempio:
            List1.AddItem FileCorrente & vbTab & structHeader.UnpSize & " Kb"
         End If
        ' si aggiorna il puntatore della struttura structHeader
        ' al file successivo
        opStatus = RARReadHeader(hRAR, structHeader )
   Loop

Chiedo scusa, ma le definizioni del Type e dei Declare di queste funzioni
dove le posso trovare?
Sarei interessato anch'io...
--
Umberto Meroni
webm...@vbp.it
---
Sito Visual Basic: 
http://www.vbp.it
Sito Comune VB: 
http://www.murialdo.it/it_lang_vb
---

 dove le posso trovare?
Const ERAR_END_ARCHIVE = 10
Const ERAR_NO_MEMORY = 11
Const ERAR_BAD_DATA = 12
Const ERAR_BAD_ARCHIVE = 13
Const ERAR_UNKNOWN_FORMAT = 14
Const ERAR_EOPEN = 15
Const ERAR_ECREATE = 16
Const ERAR_ECLOSE = 17
Const ERAR_EREAD = 18
Const ERAR_EWRITE = 19
Const ERAR_SMALL_BUF = 20
Const RAR_OM_LIST = 0
Const RAR_OM_EXTRACT = 1
Const RAR_SKIP = 0
Const RAR_TEST = 1
Const RAR_EXTRACT = 2
Const RAR_VOL_ASK = 0
Const RAR_VOL_NOTIFY = 1
Enum RarOperations
    OP_EXTRACT = 0
    OP_TEST = 1
    OP_LIST = 2
End Enum
Private Type RARHeaderData
    ArcName As String * 260
    FileName As String * 260
    Flags As Long
    PackSize As Long
    UnpSize As Long
    HostOS As Long
    FileCRC As Long
    FileTime As Long
    UnpVer As Long
    Method As Long
    FileAttr As Long
    CmtBuf As String
    CmtBufSize As Long
    CmtSize As Long
    CmtState As Long
End Type
Private Type RAROpenArchiveData
    ArcName As String
    OpenMode As Long
    OpenResult As Long
    CmtBuf As String
    CmtBufSize As Long
    CmtSize As Long
    CmtState As Long
End Type
Private Declare Function RAROpenArchive Lib "unrar.dll" _
    (ByRef ArchiveData As RAROpenArchiveData) As Long
Private Declare Function RARCloseArchive Lib "unrar.dll" _
    (ByVal hArcData As Long) As Long
Private Declare Function RARReadHeader Lib "unrar.dll" _
    (ByVal hArcData As Long, _
    ByRef HeaderData As RARHeaderData) As Long
Private Declare Function RARProcessFile Lib "unrar.dll" _
    (ByVal hArcData As Long, _
    ByVal Operation As Long, _
    ByVal DestPath As String, _
    ByVal DestName As String) As Long
Private Declare Sub RARSetChangeVolProc Lib "unrar.dll" _
    (ByVal hArcData As Long, _
    ByVal Mode As Long)
Private Declare Sub RARSetPassword Lib "unrar.dll" _
    (ByVal hArcData As Long, _
    ByVal Password As String)