unrar.dll entpackt nicht -.- [Gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hier nochmal eine fehlerbereinigte Version:

Code: Alles auswählen

EnableExplicit

Enumeration ; UNRARCALLBACK_MESSAGES
  #UCM_CHANGEVOLUME
  #UCM_PROCESSDATA
  #UCM_NEEDPASSWORD
EndEnumeration

#ERAR_END_ARCHIVE        = 10
#ERAR_NO_MEMORY          = 11
#ERAR_BAD_DATA           = 12
#ERAR_BAD_ARCHIVE        = 13
#ERAR_UNKNOWN_FORMAT     = 14
#ERAR_EOPEN              = 15
#ERAR_ECREATE            = 16
#ERAR_ECLOSE             = 17
#ERAR_EREAD              = 18
#ERAR_EWRITE             = 19
#ERAR_SMALL_BUF          = 20
#ERAR_UNKNOWN            = 21
#ERAR_MISSING_PASSWORD   = 22

#RAR_HEADERFLAG_ENCRYPTED  = %00000100
#RAR_OM_LIST             = 0
#RAR_OM_EXTRACT          = 1
#RAR_OM_LIST_INCSPLIT    = 2

#RAR_SKIP                = 0
#RAR_TEST                = 1
#RAR_EXTRACT             = 2

#RAR_VOL_ASK             = 0
#RAR_VOL_NOTIFY          = 1

#RAR_DLL_VERSION         = 4

Structure RARHeaderDataEx
  ArcName.b[1024]
  ArcNameW.w[1024]
  FileName.b[1024]
  FileNameW.w[1024]
  Flags.l
  PackSize.q
  UnpSize.q
  HostOS.l
  FileCRC.l
  FileTime.l
  UnpVer.l
  Method.l
  FileAttr.l
  *CmtBuf.l
  CmtBufSize.l
  CmtSize.l
  CmtState.l
  Reserved.l[1024]
EndStructure

Structure RAROpenArchiveDataEx
  *ArcName
  *ArcNameW
  OpenMode.l
  OpenResult.l
  *CmtBuf.l
  CmtBufSize.l
  CmtSize.l
  CmtState.l
  Flags.l
  Reserved.l[32]
EndStructure

Prototype UNRARCALLBACK(msg, UserData, P1, P2)
Prototype CHANGEVOLPROC(ArcName.s, Mode)
Prototype PROCESSDATAPROC(*Addr, Size)

Prototype RAROpenArchive(*ArchiveData.RAROpenArchiveDataEx)
Prototype RARCloseArchive(hArcData)
Prototype RARReadHeader(hArcData, *HeaderData.RARHeaderDataEx)
Prototype RARProcessFile(hArcData, Operation, DestPath.s, DestName.s)
Prototype RARSetCallback(hArcData, *Callback.UNRARCALLBACK, UserData)
Prototype RARSetChangeVolProc(hArcData, *ChangeVolProc.CHANGEVOLPROC)
Prototype RARSetProcessDataProc(hArcData, *ProcessDataProc.PROCESSDATAPROC)
Prototype RARSetPassword(hArcData, Password.p-ascii)

Prototype RARGetDllVersion()

Procedure Rar_Init()
  Protected DLL = OpenLibrary(#PB_Any, "unrar.dll")
 
  If DLL
    CompilerIf #PB_Compiler_Unicode
    Global RARProcessFile.RARProcessFile = GetFunction(DLL, "RARProcessFileW")
    CompilerElse
    Global RARProcessFile.RARProcessFile = GetFunction(DLL, "RARProcessFile")
    CompilerEndIf
    Global RAROpenArchive.RAROpenArchive = GetFunction(DLL, "RAROpenArchiveEx")
    Global RARReadHeader.RARReadHeader = GetFunction(DLL, "RARReadHeaderEx")
    Global RARCloseArchive.RARCloseArchive = GetFunction(DLL, "RARCloseArchive")
    Global RARSetCallback.RARSetCallback = GetFunction(DLL, "RARSetCallback")
    Global RARSetChangeVolProc.RARSetChangeVolProc = GetFunction(DLL, "RARSetChangeVolProc")
    Global RARSetProcessDataProc.RARSetProcessDataProc = GetFunction(DLL, "RARSetProcessDataProc")
    Global RARSetPassword.RARSetPassword = GetFunction(DLL, "RARSetPassword")
    Global RARGetDllVersion.RARGetDllVersion = GetFunction(DLL, "RARGetDllVersion")
    ProcedureReturn DLL
  EndIf

  ProcedureReturn #False
EndProcedure

Procedure RAR_Unpack(rarfile.s, destpath.s = "")
  Protected hRAR, DLL
  Protected rarheader.RARHeaderDataEx
  Protected raropen.RAROpenArchiveDataEx

  DLL = Rar_Init()

  If DLL
    CompilerIf #PB_Compiler_Unicode
    raropen\ArcNameW = @rarfile
    CompilerElse
    raropen\ArcName= @rarfile
    If destpath
      CharToOem_(destpath, destpath)
    EndIf
    CompilerEndIf
 
    raropen\OpenMode = #RAR_OM_EXTRACT
 
    hRAR = RAROpenArchive(@raropen)
    If hRAR
      While Not RARReadHeader(hRAR, @rarheader)
        RARProcessFile(hRAR, #RAR_EXTRACT, destpath, #NULL$)
      Wend
      RARCloseArchive(hRAR)
      CloseLibrary(DLL)

      ProcedureReturn #True
    EndIf
  EndIf
 
  ProcedureReturn #False   
EndProcedure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

jetzt geht es :)

vielen liben dank :)
Bild
Antworten