7-zip32.dll wrapper

Ankündigungen PureBasic oder die Community betreffend.
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

7-zip32.dll wrapper

Beitrag von ts-soft »

Damit ich es nicht 2x posten muß, findet ihr im engl. Forum:
http://www.purebasic.fr/english/viewtopic.php?t=26429
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
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

Das sieht ja recht interessant aus. Vorallem da ich mit dem gedanken spiele
7z-Support in PFM einzubinden. Hab dazu mal ein paar fragen.:

1) Wie Extractet man denn nun Files aus dem Archiv ? Bei den Funktionsnamen
scheint kein Name dabei zu sein der darauf schliessen lässt etwas entpacken zu können.

2) Wo kann man eigentlich eine aktuelle version der Dll downloaden ?
Ich meine es ist ja nicht die selbe wie die die im Original-7Zip enthalten ist.

Da ich das ganze gerne auch ohne pbi machen würde, habe ich mir mal folgendes zusammengebastelt.:

Code: Alles auswählen


#ARCEXTRACT_BEGIN = 0
#ARCEXTRACT_INPROCESS = 1
#ARCEXTRACT_END = 2
#ARCEXTRACT_OPEN = 3
#ARCEXTRACT_COPY = 4

Structure SEVENZIPINFO
  dwOriginalSize.l
  dwCompressedSize.l
  dwCRC.l
  uFlag.l
  uOSType.l
  wRatio.w
  wDate.w
  wTime.w
  szFileName.c[#MAX_PATH]
  dummy1.c[3]
  szAttribute.c[8]
  szMode.c[8]
EndStructure

Define.SEVENZIPINFO SEVENINFO
ArcName$="C:\test.7z"
DLL$="c:\7-zip32.dll"

If OpenLibrary(0, DLL$)
  *SevenZipOpenArchive.l = GetFunction(0, "SevenZipOpenArchive")
  *SevenZipCloseArchive.l = GetFunction(0, "SevenZipCloseArchive")
  *SevenZipFindFirst.l = GetFunction(0, "SevenZipFindFirst")
  *SevenZipFindNext.l = GetFunction(0, "SevenZipFindNext")

  hARC.l = CallFunctionFast(*SevenZipOpenArchive, 0, ArcName$, #ARCEXTRACT_OPEN) 

  If hARC
    If Not CallFunctionFast(*SevenZipFindFirst, hARC, "", @SEVENINFO)
      name$ = PeekS(@SEVENINFO\szFileName)
      len.q = SEVENINFO\dwOriginalSize
      Debug name$+"   "+Str(len)
      While Not CallFunctionFast(*SevenZipFindNext, hARC, @SEVENINFO)
        name$ = PeekS(@SEVENINFO\szFileName)
        len.q = SEVENINFO\dwOriginalSize
        Debug name$+"   "+Str(len)
      Wend
    EndIf
    CallFunctionFast(*SevenZipCloseArchive, hARC)
  EndIf

  CloseLibrary(0)
EndIf
Das klappt soweit auch zu meiner zufriedenheit. Allerdings ist mir aufgefallen
das keine Leeren Ordner angezeigt werden. Gibts da ne möglichkeit diesen
umstand zu korrigieren ?
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 »

al90 hat geschrieben:Das sieht ja recht interessant aus. Vorallem da ich mit dem gedanken spiele
7z-Support in PFM einzubinden. Hab dazu mal ein paar fragen.:

1) Wie Extractet man denn nun Files aus dem Archiv ? Bei den Funktionsnamen
scheint kein Name dabei zu sein der darauf schliessen lässt etwas entpacken zu können.
Mit der Funktion SevenZip, siehe das zweite Beispiel im Thread, entpacken
ist e oder x als erster parameter.
al90 hat geschrieben: 2) Wo kann man eigentlich eine aktuelle version der Dll downloaden ?
Ich meine es ist ja nicht die selbe wie die die im Original-7Zip enthalten ist.
Es ist aber die aktuelle Version, nur von 7-zip gibst noch eine beta.
Downloaden siehe den link zur dt. Anleitung, in Japan, den richtigen Krakel
anklicken und los gehts :mrgreen: Im moment ja nicht nötig
al90 hat geschrieben: Da ich das ganze gerne auch ohne pbi machen würde, habe ich mir mal folgendes zusammengebastelt.:

Code: Alles auswählen

umständlicher code der nicht die statische lib nutzt
Das klappt soweit auch zu meiner zufriedenheit. Allerdings ist mir aufgefallen
das keine Leeren Ordner angezeigt werden. Gibts da ne möglichkeit diesen
umstand zu korrigieren ?
Keine Ahnung, lese die engl. Anleitung, oder besser die japanische, die
ist aktueller :mrgreen:

Mit der Funktion SevenZip kannste alles machen, was man mit der
Consolenversion per Kommandozeile machen kann, die Syntax ist
ähnlich, kannste also der 7-zip Hilfe entnehmen.
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
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

ts-soft hat geschrieben: [...]in Japan, den richtigen Krakel
anklicken und los gehts :mrgreen:
Mach mich nicht schwach. Wie hast du das blos gefunden ? :freak:
Im moment ja nicht nötig
Na Gott sei Dank. :mrgreen:

Code: Alles auswählen

umständlicher code der nicht die statische lib nutzt
Naja was man oftmals alles so als umständlich bezeichnet. Da ich öfters mal
mein Windows & PB neu draufhaue, habe ich es ganz gerne wenn meine
Sourcen danach sofort wieder laufen. :mrgreen:
Keine Ahnung, lese die engl. Anleitung, oder besser die japanische, die
ist aktueller :mrgreen:
:lol: :allright:
Mit der Funktion SevenZip kannste alles machen, was man mit der
Consolenversion per Kommandozeile machen kann, die Syntax ist
ähnlich, kannste also der 7-zip Hilfe entnehmen.
Demnach isses also essig mit eigenem GUI wie es bspw. bei RAR möglich ist ? Ich meine so mit callback und allem drum und dran ?
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 »

>> Demnach isses also essig mit eigenem GUI wie es bspw. bei RAR möglich ist ? Ich meine so mit callback und allem drum und dran ?
Warum? Allerdings für SFX ist nur der Standard Stubs in der DLL.
Ansonsten zur anzeige kannste die schönen Funktionen nehmen, zum
eigentlichen Packen und entpacken mußte dir dann die passende
Commandozeile als String basteln und der SevenZip Funktion übergeben,
nur diese packt und entpackt, der Rest ist nur für Infos, also für deinen DM,
zur Anzeige.
Einzige Info die ich noch habe: Es funzt, aber ein falscher Parameter in der
Commandozeile (fehlender Space, oder #DQUOTE$) und es ist Essig :mrgreen:

Callback geht wohl auch irgendwie, aber da er autom. ein Fortschrittfenster
anzeigt, ist das doch unnötig.
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
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

ts-soft hat geschrieben: Callback geht wohl auch irgendwie, aber da er autom. ein Fortschrittfenster
anzeigt, ist das doch unnötig.
Genau darin liegt eben das problem. :freak:
Ich benutze immer 2 ProgressBalken für alle Packer. (Wie du ja selbst weist momentan ZIP+RAR)
Das GUI ist also einheitlich während des Entpackens. Somit kann ich das
bisherige konzept nicht aufrecht erhalten. Schade eigentlich. :cry:

Naja ich werde mir das bei zeiten mal genauer ansehen. Jetzt steht erstmal die 1.6
mit CommandLine an. :mrgreen: (Wenn sich der Translator im E-Forum nur endlich mal melden würde.)
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 »

Der Prototyp fürs Callback ist ja bei, den Rest mußte austesten.
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
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

ts-soft hat geschrieben:Der Prototyp fürs Callback ist ja bei, den Rest mußte austesten.
Ich warte lieber bist du dich für's update wieder durch die japanischen seiten gequält hast. =)
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 »

al90 hat geschrieben:
ts-soft hat geschrieben:Der Prototyp fürs Callback ist ja bei, den Rest mußte austesten.
Ich warte lieber bist du dich für's update wieder durch die japanischen seiten gequält hast. =)
Das warten bringt nichts, die Dokumentation wird dadurch sicherlich nicht
besser, lediglich die engl. Übersetzung hinkt noch weiter hinterher.

Wie man das Callback einsetzt, die Funktionsparameter haben ja alle
aussagekräftige Bezeichner und die Typbezeichner sind auch bei, also auch
dort, wo der Callback-Prototyp als Pointer übergeben wird, mußte alles nur
noch testen und ein bissel logisch überlegen, wie das funzen könnte, ich
hab da im moment kein Bedarf, mir reicht das es theoretisch Funktionieren
müßte :mrgreen:
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
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

ts-soft hat geschrieben:Das warten bringt nichts, die Dokumentation wird dadurch sicherlich nicht besser
Die Docs vllt. nicht, aber der Code. :mrgreen:
ich hab da im moment kein Bedarf, mir reicht das es theoretisch Funktionieren
müßte :mrgreen:
Wie gesagt, schaue ich mir später mal genauer an. :wink:
Antworten