Dmitriy2003 » 30.07.2003 (Ср) 22:48
Енти в модуле класса CUnRaR
------------------------------------------------------------------
Private Declare Function RAROpenArchive Lib "unrar.dll" (ArcData As RAROpenArchiveData) As Long
Private Declare Function RARReadHeader Lib "unrar.dll" (ByVal hArcData As Long, 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 Function RARCloseArchive Lib "unrar.dll" (ByVal hArcData As Long) As Long
Private Declare Sub RARSetChangeVolProc Lib "unrar.dll" (ByVal hArcData As Long, ByVal lpfChangeVolProc As Long)
Private Declare Sub RARSetProcessDataProc Lib "unrar.dll" (ByVal hArcData As Long, ByVal lpfProcessDataProc As Long)
Private Declare Sub RARSetPassword Lib "unrar.dll" (ByVal hArcData As Long, ByVal Password As String)
'
Енти в станд. модуле
-------------------------------------------
Public Function ChangeVolProc(ByVal ArcName As Long, ByVal Mode As Long) As Long
'
End Function
'
Public Function ProccessDataProc(ByVal lAddr As Long, ByVal lSize As Long) As Long
'
End Function
'
Архив нормально открывается файлы прекрасно извлекаются
Да вот только когда CallBack ставлю что на ChangeVolProc, что на ProccessDataProc происходит катавасия какаято...
вот код моих вызовов:
---------------------------------------------------------
Public Function ExtractArchive(sArchive As String, Optional sDestPath As String, Optional sPassword As String) As Boolean
'
Dim hArc As Long
Dim HRCode As Long
Dim PFCode As Long
Dim Hdr As RARHeaderData
'
ExtractArchive = True
'
If Not OpenArchive(sArchive, RAR_OM_EXTRACT, hArc) Then
ExtractArchive = False
Exit Function
End If
'
If bfPrDataView Then
RARSetProcessDataProc hArc, AddressOf ProccessDataProc
End If
'
If Len(sPassword) > 0 Then RARSetPassword hArc, sPassword
'
Hdr.CmtBuf = CMT_NULL
HRCode = RARReadHeader(hArc, Hdr)
'
Do While (HRCode = RAR_HDR_READ_OK)
'
'Здесь в первый раз вызывается ProccessDataProc...гм. Ну и последний.....
PFCode = RARProcessFile(hArc, RAR_EXTRACT, sDestPath, vbNullString)
'
If PFCode <> RAR_FILE_PR_OK Then
OutProcessFileError PFCode, Left$(Hdr.FileName, lstrlen(Hdr.FileName)), nERMetod
ExtractArchive = False
Exit Do
End If
'
HRCode = RARReadHeader(hArc, Hdr)
Loop
'
If HRCode = ERAR_BAD_DATA Then
OutHeaderReadError HRCode, Left$(Hdr.FileName, lstrlen(Hdr.FileName)), nERMetod
ExtractArchive = False
End If
'
Call CloseArchive(hArc, Left$(Hdr.ArcName, lstrlen(Hdr.ArcName)))
'
End Function
Dmitrich