Skip to content

Callback

Jiowcl edited this page Jun 23, 2021 · 2 revisions

Callback

Callback Function

Function UnRARCallbackProc(Byval msg As Integer, Byval UserData As Integer, Byval P1 As Long, Byval P2 As Long) As Long
  Select Case Msg
  Case $UCM_PROCESSDATA
  Case $UCM_CHANGEVOLUMEW
  Case $UCM_NEEDPASSWORDW 
  End Select
  
  Function = 0
End Function

Test Extract Files with Callback Function

USES "CONSOLE"

#INCLUDE Once ".\Core\Enums.inc"
#INCLUDE Once ".\Core\Runtime.inc"
#Include Once ".\Core\RARArchive.inc"

Global lpszSampleFilePath As String

Global ArchiveData As RAROpenArchiveDataEx
Global HeaderData As RARHeaderDataEx

Global hRARArchiveHandle As Long
Global hUnRARProcCode As Long

lpszSampleFilePath = ".\TestFile\example.rar"

ArchiveData.ArcNameW = Ascii2Unicode(lpszSampleFilePath)
ArchiveData.OpenMode = $RAR_OM_EXTRACT
ArchiveData.CmtBuf = ""
ArchiveData.CmtBufSize = 0

' Callback Function
Function UnRARCallbackProc(Byval msg As Integer, Byval UserData As Integer, Byval P1 As Long, Byval P2 As Long) As Long
  Select Case Msg
  Case $UCM_PROCESSDATA
  Case $UCM_CHANGEVOLUMEW
  Case $UCM_NEEDPASSWORDW 
  End Select
  
  Function = 0
End Function

hRARArchiveHandle = RAROpenArchiveEx(ArchiveData)

If ArchiveData.OpenResult = $ERAR_SUCCESS Then
  RARSetCallback(hRARArchiveHandle, CodePtr(UnRARCallbackProc), 0)

  Printl("Source: " . lpszSampleFilePath)

  While RARReadHeaderEx(hRARArchiveHandle, HeaderData) = 0
    hUnRARProcCode = RARProcessFileW(hRARArchiveHandle, $RAR_TEST, "", "")
    
    Printl "Test File: " . HeaderData.FileNameW
  Wend
end if

RARCloseArchive(hRARArchiveHandle)

Console_Read()

Test Extract Files with Callback Function (UnRARWrapper)

USES "CONSOLE"

#INCLUDE Once ".\Core\Enums.inc"
#INCLUDE Once ".\Core\Runtime.inc"
#Include Once ".\Core\RARArchive.inc"
#Include Once ".\Core\UnRARWrapper.inc"

Dim UnRAR As UnRARArchive

Global lpszSampleFilePath As String

Global ArchiveData As RAROpenArchiveDataEx
Global HeaderData As RARHeaderDataEx

Global hRARArchiveHandle As Long
Global hUnRARProcCode As Long

lpszSampleFilePath = ".\TestFile\example.rar"

ArchiveData.ArcNameW = Ascii2Unicode(lpszSampleFilePath)
ArchiveData.OpenMode = $RAR_OM_EXTRACT
ArchiveData.CmtBuf = ""
ArchiveData.CmtBufSize = 0

' Callback Function
Function UnRARCallbackProc(Byval msg As Integer, Byval UserData As Integer, Byval P1 As Long, Byval P2 As Long) As Long
  Select Case Msg
  Case $UCM_PROCESSDATA
  Case $UCM_CHANGEVOLUMEW
  Case $UCM_NEEDPASSWORDW 
  End Select
  
  Function = 0
End Function

hRARArchiveHandle = UnRAR.OpenArchiveEx(ArchiveData)

If ArchiveData.OpenResult = $ERAR_SUCCESS Then
  Printl("Source: " . lpszSampleFilePath)
  
  UnRAR.SetCallback(hRARArchiveHandle, CodePtr(UnRARCallbackProc), 0)

  While UnRAR.ReadHeaderEx(hRARArchiveHandle, HeaderData) = 0
    hUnRARProcCode = UnRAR.ProcessFileW(hRARArchiveHandle, $RAR_TEST, "", "")
    
    Printl "Test File: " . HeaderData.FileNameW
  Wend
End If

UnRAR.CloseArchive(hRARArchiveHandle)

Console_Read()