Seite 1 von 2

Patcher [UnRar.dll]

Verfasst: 17.07.2007 14:52
von Tsuki-Namida
Hallo, einige kennen doch Ragnarok und dessen Patcher.
ich kenne eine person die sich einen test server gemacht hat, hat aber noch keinen patcher.

ich habe mich angebote einen zu schreiben (wird schon nicht schwer sein habe ich gesagt) okay nun hänge ich doch^^

und zwar wird das aktuelle update heruntergeladen (ist gepackt mit WinRar und gesplittest)
so nun hänge ivch aber am entpacken...

Mir ist bekannt:
UnRar.dll (habe ich)
Semtliche Foren beiträge (gelesen)
PureArea.net (durchsucht und gelesen was gefunden)

Mein problem:
Ich kann momentahn nur PB 3.94 nutzen.
Ich hbae einen Error an volgender stelle.

hRAR=CallFunctionFast(*RAROpenArchive,@raropen)
[ERROR] Invalid memory access.

Code: Alles auswählen

;PB_unRAR - Paul Leischow, Sept.6, 2002
;RAR Archive extractor that uses the free UNRAR.DLL
;


#RAR_OM_LIST=0
#RAR_OM_EXTRACT=1
#RAR_SKIP=0
#RAR_TEST=1
#RAR_EXTRACT=2
#RAR_VOL_ASK=0
#RAR_VOL_NOTIFY=1
#RAR_DLL_VERSION=3


Structure RARHeaderData
  ArcName.b[260]
  FileName.b[260]
  Flags.l
  PackSize.l
  UnpSize.l
  HostOS.l
  FileCRC.l
  FileTime.l
  UnpVer.l
  Method.l
  FileAttr.l
  *CmtBuf.s
  CmtBufSize.l
  CmtSize.l
  CmtState.l
EndStructure
rarheader.RARHeaderData

Structure RAROpenArchiveData
  *ArcName.s
  OpenMode.l
  OpenResult.l
  *CmtBuf.s
  CmtBufSize.l
  CmtSize.l
  CmtState.l
EndStructure
raropen.RAROpenArchiveData



OpenLibrary(0,"unrar.dll")
  *RAROpenArchive=IsFunction(0,"RAROpenArchive")
  *RARCloseArchive=IsFunction(0,"RARCloseArchive")
  *RARReadHeader=IsFunction(0,"RARReadHeader") 
  *RARProcessFile=IsFunction(0,"RARProcessFile")
  *RARGetDllVersion=IsFunction(0,"RARGetDllVersion")

OPR$=OpenFileRequester("","C:\","WinRar (*.rar)|*.rar",0)
      raropen\ArcName=OPR$
      raropen\OpenMode=#RAR_OM_EXTRACT
      hRAR=CallFunctionFast(*RAROpenArchive,@raropen)
     
      If raropen\OpenResult
        MessageRequester("Error","Could Not Open RAR File",#MB_ICONERROR)
        Else       
        Repeat
          stat=CallFunctionFast(*RARReadHeader,hRAR,@rarheader)
          If stat=0
            filelist.s+PeekS(@rarheader\FileName[0])+Chr(10)
            res=CallFunctionFast(*RARProcessFile,hRAR,#RAR_EXTRACT,"c:",@rarheader\FileName[0])
          EndIf
        Until stat<>0
        MessageRequester("Files Extracted",filelist,#MB_ICONINFORMATION)
      EndIf

      CallFunctionFast(*RARCloseArchive,hRAR)
 
  CloseLibrary(0) 
ich hoffe das mir jemand helfe kann... danke

Verfasst: 17.07.2007 15:34
von Tsuki-Namida
okay fehler doch noch gefunden^^ die phat angabe zur dll war falsch...

aber habe jetzt ein neues problem....
es wurde zwar erfolgrei entpackt aber nicht in das angegebene verzeichniss "c:" ich habe es auch mit "c:\" versucht aber leider ohne erfolg :(

es sind keine daten auf C:\ zufinden jedenfals nicht die, die entpackt wurden :(

Verfasst: 17.07.2007 17:44
von dysti
Habe die Demo mal ausprobiert und so funktioniert es:

Code: Alles auswählen

iStatus = CallFunctionFast(*RARReadHeader,lHandle, @uHeader)
sStat = PeekS(@uHeader\FileName)
Ret = CallFunctionFast(*RARProcessFile,lHandle, #RAR_EXTRACT, "", "C:\testrar\" + sStat)

Verfasst: 17.07.2007 18:25
von Tsuki-Namida
naja bei mir braucht es auch eine kurze weile bevor der messagerequester komm
MessageRequester("Files Extracted",filelist,#MB_ICONINFORMATION)
aber wenn ich dann in den angegebenen ordner gehe ist er leer :(

[edit]
ich habe mal den wert von der zeile ausgelesen
CallFunctionFast(*RARProcessFile,hRAR,#RAR_EXTRACT,"C:\Unrar",@rarheader\FileName[0])
und ich bekomme eine 0 raus :(
[/edit]

Verfasst: 18.07.2007 09:05
von dysti
@kain, da du dir keine Gedanken machst, hier die Lösung:

Code: Alles auswählen

;PB_unRAR - Paul Leischow, Sept.6, 2002
;RAR Archive extractor that uses the free UNRAR.DLL
;


#RAR_OM_LIST=0
#RAR_OM_EXTRACT=1
#RAR_SKIP=0
#RAR_TEST=1
#RAR_EXTRACT=2
#RAR_VOL_ASK=0
#RAR_VOL_NOTIFY=1
#RAR_DLL_VERSION=3


Structure RARHeaderData
  ArcName.b[260]
  FileName.b[260]
  Flags.l
  PackSize.l
  UnpSize.l
  HostOS.l
  FileCRC.l
  FileTime.l
  UnpVer.l
  Method.l
  FileAttr.l
  *CmtBuf.s
  CmtBufSize.l
  CmtSize.l
  CmtState.l
EndStructure
rarheader.RARHeaderData

Structure RAROpenArchiveData
  ArcName.s
  OpenMode.l
  OpenResult.l
  CmtBuf.s
  CmtBufSize.l
  CmtSize.l
  CmtState.l
EndStructure
raropen.RAROpenArchiveData

 Global hDLL.l
  Global *RAROpenArchive.l
  Global *RARCloseArchive.l
  Global *RARReadHeader.l 
  Global *RARProcessFile.l
  Global *RARSetChangeVolProc.l
  Global *RARSetPassword.l 

OpenLibrary(0,"unrar.dll")
  ;*RAROpenArchive=IsFunction(0,"RAROpenArchive")
  ;*RARCloseArchive=IsFunction(0,"RARCloseArchive")
  ;*RARReadHeader=IsFunction(0,"RARReadHeader")
  ;*RARProcessFile=IsFunction(0,"RARProcessFile")
  ;*RARGetDllVersion=IsFunction(0,"RARGetDllVersion")
  ;*RARSetChangeVolProc.l = IsFunction(0, "RARSetChangeVolProc")
  ;*RARSetPassword.l = IsFunction(0, "RARSetPassword")
  
  *RAROpenArchive.l = GetFunction(0, "RAROpenArchive")
  *RARCloseArchive.l = GetFunction(0, "RARCloseArchive")
  *RARReadHeader.l = GetFunction(0, "RARReadHeader")
  *RARProcessFile.l = GetFunction(0, "RARProcessFile")
  *RARSetChangeVolProc.l = GetFunction(0, "RARSetChangeVolProc")
  *RARSetPassword.l = GetFunction(0, "RARSetPassword")

OPR$=OpenFileRequester("","C:\","WinRar (*.rar)|*.rar",0)
      raropen\ArcName=OPR$
      raropen\CmtBuf = Space(16384)
      raropen\CmtBufSize = 16384
      raropen\OpenMode=#RAR_OM_EXTRACT
      hRAR=CallFunctionFast(*RAROpenArchive,@raropen)
     
      If raropen\OpenResult
        MessageRequester("Error","Could Not Open RAR File",#MB_ICONERROR)
        Else       
        Repeat
          stat=CallFunctionFast(*RARReadHeader,hRAR,@rarheader)
          If stat=0
            filelist.s=PeekS(@rarheader\FileName)
            res=CallFunctionFast(*RARProcessFile,hRAR,#RAR_EXTRACT,"","C:\testrar\"+filelist.s)
          EndIf
        Until stat<>0
        MessageRequester("Files Extracted",filelist,#MB_ICONINFORMATION)
      EndIf

      CallFunctionFast(*RARCloseArchive,hRAR)
 
  CloseLibrary(0)

Verfasst: 18.07.2007 16:14
von Kai
[Offtopic]
Dann richte mal deinen Freund (zwinker) aus, das ist illegal einen RO PServer zu betreiben und er sollte sich lieber nicht erwischen lassen.
[/Offtopic]

Verfasst: 18.07.2007 17:51
von dysti
@Kai,
wer ist hier eigentlich gemeint und was ist das überhaupt für ein Server den du meinst. Irgendwie kenne ich die Abkürzung nicht.
Ich glaube der Kommentar gehört zu diesem Beitrag:
Netzwerk Server (Sound übertragung)

Verfasst: 18.07.2007 23:32
von Kai
dysti hat geschrieben:@Kai,
wer ist hier eigentlich gemeint und was ist das überhaupt für ein Server den du meinst. Irgendwie kenne ich die Abkürzung nicht.
Ich glaube der Kommentar gehört zu diesem Beitrag:
Netzwerk Server (Sound übertragung)
Sry, Ragnarok ist ein Online Spiel bei dem schon sehr viel drüber diskutiert wurde, was PServer (Privat Server) angeht, das es mir ohnehin schon zum Halse raushängt, nun lese ich selbst hier schon davon, und bin bissel stinkig drüber.
Und nein, der Kommentar war für hier gedacht.
Es ist einfach strikt verboten solch einen Server zu betreiben, und da es oben auch noch erwähnt wurde, konnte ich mich nicht unterbinden, allen diese Information mitzuteilen, das ihr hier indirekt sowas unterstützt.

PServer Info
Ragnarok Info

Verfasst: 19.07.2007 00:06
von Tsuki-Namida
@dysti
Danke erst mal für deine Hilfe :)
und nein das ist ein anderes projekt mit der sound übertragung ;)

@Kai
Ich werde es ihm ausrichten und fileicht nimmt er es sich zu herzen aber versprehen kann ich es nicht

Verfasst: 19.07.2007 14:17
von dysti
Nun ja, mit Spielen habe ich rein garnichts am Hut. Das einzige Spiel was ich kenne ist Moorhuhn. Sonst habe ich nur PB und Datenbanken im Sinn.
Anscheinend handelt es sich um den PServer um einen Server, der einem ermöglicht, das Onlinespiel "Ragnaro" im privaten Netzwerk zu betreiben.
Egal, das interessiert mich nicht. Was mich hier nur intessiert hat, das Programmierproblem mit der unrar.dll und die ist Freeware.