Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sevezip.pas [ISO] (https://www.delphipraxis.net/156177-sevezip-pas-%5Biso%5D.html)

-Phantom- 22. Nov 2010 22:44

Sevezip.pas [ISO]
 
Hey Leute,

wie ihr vielleicht schon mit bekommen habt entwickel ich garde einen Entpacker, der ist schon fast fertig und ich war am testen ob der auch alle Archive entpackt. Dann ist mir aufgefallen das der keine ".iso" Archive entpackt.

In der sevenzip.pas steht das
Delphi-Quellcode:
 
  CLSID_CFormatUdf     : TGUID = '{23170F69-40C1-278A-1000-000110E00000}'; // iso
  CLSID_CFormatIso     : TGUID = '{23170F69-40C1-278A-1000-000110E70000}'; // iso
Es sind 2 unterschiedliche. Aber beide gehen nicht . Er entpackt sie nicht nur, er "öffnet" sie gar nicht erst. Die Dateien können nicht ausgelesen werden, als Fehlermeldung kommt "Unzulässige Funktion"
Bei allen andern Archiv klappt das wie : .rar, .zip, .cab, .lzma, .xpi usw
Ich mache es Folgendermaßen:
Delphi-Quellcode:
    if openend = '.iso' then
    begin
      with CreateInArchive(CLSID_CFormatiso) do
      begin
        Hinzufgen1.Enabled := false;
        sBitBtn3.Enabled := false;
        sBitBtn5.Enabled := false;
        Eigenschaften1.Enabled := false;
        openfile(openpfad);
        i := numberofitems;
        for i := 0 to numberofitems - 1 do
        begin
          inpfad := itempath[i];
          zpfad := StringReplace(inpfad, '/', '\', [rfReplaceAll]);
          datei := Extractfilename(zpfad);
          Item := Dateilist.Items.add;
          Item.Caption := datei;
          Item.SubItems.add(Extractfilename(openpfad) + '/' + inpfad);
          Item.SubItems.add(inttostr(itemsize[i]) + ' B');
          lblag.Caption := inttostr(GetFileSizeA(openpfad) div 1024) + ' KB';
          date1 := CurrentFileTime;
          Item.SubItems.add(datetostr(FileTimeToDateTime(date1)))
        end;
      end;
      lblanzahl.Caption := inttostr(i);
    end;

s.h.a.r.k 22. Nov 2010 22:47

AW: Sevezip.pas [ISO]
 
Und das genaue Problem besteht wo? Dass du von uns nun wissen willst, wie ISO-Dateien entpackt werden können? Oder wo der Fehler in deinem Code steckt?

-Phantom- 22. Nov 2010 22:50

AW: Sevezip.pas [ISO]
 
Wie ich das nun hin bekomme, dass die ISO Archive entpackt werden.

Der Code ist ja richtig, weil die andren Archive damit ausgelesen und entpackt werden können. Hab es nur als Beispiel beigelegt

s.h.a.r.k 22. Nov 2010 22:53

AW: Sevezip.pas [ISO]
 
Wo in deinem Code erscheint denn die Fehlermeldung?
Delphi-Quellcode:
CreateInArchive
ist ja deine eigene Methode und ich vermute stark, dass der Fehler da steckt. Dein Code ist halt für die bisherigen Archive korrekt, nicht aber für das ISO-Format -- davon gehe ich im Moment eben aus.

-Phantom- 22. Nov 2010 22:56

AW: Sevezip.pas [ISO]
 
Es ist ne Laufzeit Fehlermeldung. Es kommt wenn ich versuche die ISO zu öffnen

// wieso ist das meine Methode? Die kommt von der sevenzip.pas

s.h.a.r.k 22. Nov 2010 22:58

AW: Sevezip.pas [ISO]
 
Wow... Du hilfst uns ja nicht gerade viel ;) Schau doch einfach mal in welcher Zeile genau der Fehler auftritt. Setz halt mal einen Haltepunkt an die
Delphi-Quellcode:
CreateInArchive
Methode und gehe dann, sobald der Punkt erreicht ist, mit F7 weiter bis der Fehler auftritt.

Zudem wäre es interessant zu wissen, wie denn die Methode
Delphi-Quellcode:
CreateInArchive
aussieht, in so fern darin der Fehler steckt.

-- EDIT
Wenn irgendwas unklar ist, was ich hier gerade schreiben, dann gib bescheid.

-Phantom- 22. Nov 2010 23:00

AW: Sevezip.pas [ISO]
 
Haltepunkt sagt mir nichts

Zitat:

function CreateInArchive(const classid: TGUID): I7zInArchive;
begin
Result := T7zInArchive.Create('7z.dll');
Result.ClassId := classid;
end;

s.h.a.r.k 22. Nov 2010 23:06

AW: Sevezip.pas [ISO]
 
Jetzt gilt es zu klären, ob die 7zip-DLL auch ISO-Dateien öffnen kann. Das weiß ich eben nicht.

So, dann mal ein kleiner Crash-Kurs in Sachen Debugging: Wenn du mit dem Cursor in einer Zeile bist, dann kannst du durch drücken der F5-Taste einen Haltepunkt setzen. Diese Zeile erscheint dann rot, zudem ist ein roter Punkt links vom Editor-Feld. Startest du die Anwendung mit dem Debugger F9, dann läuft dein Programm bis zu diesem Haltepunkt und springt dann in die IDE. Dort kannst du dann mit F7 und F8 weiterspringen. Hoverst du mit der Maus über eine Variable, siehst du deren Inhalt in einem Hint. Ebenso kannst du so feststellen, in welcher Zeile genau der Fehler auftritt, da du via F7 ja von Zeile zu Zeile springst. Das ist nur eine sehr minimale Beschreibung! Ich rate dir mal dieses Tutorial zu lesen!

-Phantom- 22. Nov 2010 23:11

AW: Sevezip.pas [ISO]
 
Danke. Wenn ich dann f8 drücke. Komme ich bis zu
Delphi-Quellcode:
  i := numberofitems;
dann erscheint wieder "Unzulässige Funktion"

Mit f7 komme ich bis zu
Zitat:

procedure RINOK(const hr: HRESULT);
begin
if hr <> S_OK then
raise Exception.Create(SysErrorMessage(hr));
end

lbccaleb 22. Nov 2010 23:16

AW: Sevezip.pas [ISO]
 
Das heißt, der Fehler tritt eine Zeile vorher auf, die da währe:

Delphi-Quellcode:
openfile(openpfad);
Ist also wohl so, dass er das Format nicht erkennt!
Vllt ist es auch eine andere Version, bzw ein ISO-Image und keine gepackte Datei?

-Phantom- 22. Nov 2010 23:19

AW: Sevezip.pas [ISO]
 
ist ne "ISO-Datei" Also WinRar kann es entpacken.

Hab die ISO-Datei mit dem "ISO Commander" erstellt

s.h.a.r.k 22. Nov 2010 23:21

AW: Sevezip.pas [ISO]
 
Und wo wird
Delphi-Quellcode:
RINOK()
aufgerufen? Das Problem ist, dass du mit F8 nicht in Unterroutinen springst. Beispiel:
Delphi-Quellcode:
procedure Foo();
begin // <- auf das begin einen Haltepunkt setzen
  Bar();
end;

procedure Bar();
begin
  raise Exception.Create('Bar...');
end;
Wenn du F8 nutzt, dann springt der Debugger gar nicht erst in die Bar-Methode, sondern springt in der Zeile, in der die Bar() Methode aufgerufen wird raus und bringt denn die Exception. Drückst du F7, dann geht der Debugger noch in die Bar() Methode rein. Somit ist das F7 "genauer".

-- EDIT

Installier dir mal 7zip und schau, ob es damit auch geht! Wichtig: Schau, dass du die aktuelle Version dieser DLL hast, denn da wird wohl das Problem liegen.

-Phantom- 22. Nov 2010 23:25

AW: Sevezip.pas [ISO]
 
Mache ich gleich morgen als erstes. Muss nun schlafen gehen ^^ morgen 6 Uhr ausstehen. Ich sag dann morgen bescheid ob es mit 7zip Klappt.

s.h.a.r.k 22. Nov 2010 23:55

AW: Sevezip.pas [ISO]
 
Kann dir gleich sagen, dass es mit 7zip klappt ;) Habs vorher schon probiert. Nur kann ich dir halt nicht sagen, wie 7zip das intern handelt.

-Phantom- 23. Nov 2010 19:20

AW: Sevezip.pas [ISO]
 
Gibt es den einen andern weg eine ISO-Datei zu entpacken?

mkinzler 23. Nov 2010 19:36

AW: Sevezip.pas [ISO]
 
Ja Z.B. Mounten

oder
http://sourceforge.net/projects/freeburner/
http://sourceforge.net/projects/isolib/
http://www.binarymagics.com/site/mag...urner_vcl.html
http://rocketdivision.com/burn_sdk.html

-Phantom- 23. Nov 2010 19:50

AW: Sevezip.pas [ISO]
 
Oke danke erst mal.

Ich versuche es damit hinzubekommen

// Hab grade versucht den Freeburner zu installieren. Dann kam die Meldung
Zitat:

[[DCC Error] CovertFuncs.pas(240): E2010 Incompatible types: 'AnsiChar' and 'Char'
Bei dieser Funktion
Zitat:

procedure ASPIstrCopy(Src: PChar; var Dst: ShortString; Leng: Integer);
var
i: integer;
begin
i := 0;
while (i < Leng) and (Src[i] >= ' ') do
begin
Dst[i + 1] := Src[i];
inc(i);
end;
while (i > 0) and (Dst[i] = ' ') do
Dec(i); // Trim it Right
Dst[0] := CHR(i);
end;

mkinzler 23. Nov 2010 19:55

AW: Sevezip.pas [ISO]
 
Eien ISO-Datei enthält ein ISO-Image

s.h.a.r.k 23. Nov 2010 21:32

AW: Sevezip.pas [ISO]
 
Zitat:

Zitat von -Phantom- (Beitrag 1063590)
Gibt es den einen andern weg eine ISO-Datei zu entpacken?

Ich glaube du solltest dich ein wenig besser in die Materie einlesen ;) Dann wird das mit dem entpacken einer ISO mit Sicherheit noch was. Nur ohne die Grundlagen wirds schwer.

mkinzler 23. Nov 2010 21:35

AW: Sevezip.pas [ISO]
 
Wenn möglich, würde ich diese nicht entpacken, sondern direkt auf die Inhalte zugreifen.

s.h.a.r.k 23. Nov 2010 21:49

AW: Sevezip.pas [ISO]
 
So wie ich den Code oben gelesen habe, geht es aber primär eh um das Auslesen?! Und wenn man das kann, dann kann man zur Not auch entpacken.

Auspacken würde ich ISO-Files allerdings auch nicht, das File-System etwas schonen ;)

-Phantom- 25. Nov 2010 14:45

AW: Sevezip.pas [ISO]
 
Man kann die Iso noch nicht mal auslesen man kann nichts mit ihr machen, das Progamm kennt das ISO FORMAT nicht, wieso das weiß ich leider auch nicht, es steht ja in der sevenzip.pas drin, deshalb wundert mich das ja

// Der ERROR kommt ja auch nicht beim Entpacken sondern schon wenn ich "Öffnen" klicke und da wird nur der Inhalt ausgelesen und in die Listview eingetragen

// Wieso sind in der Sevenzip.pas überhaupt 2 varianten möglich? Muss man das irgendwie Kombinieren?

-Phantom- 26. Nov 2010 00:52

AW: Sevezip.pas [ISO]
 
Mir ist nun aufgefallen das doch nicht alle Archiv ausser die ISO gehen. Eigentlich gehen fast garkeine ausser die .zip, .rar, .cab, .7z, .jar Archive. Und immer der selbe Fehler "Unzulässige Funktion". Hab ich die Falsche Dll? Ich nutze die "7z.dll" ist die sevenzip.pas die falsche? (sie hat 55 KB).

s.h.a.r.k 26. Nov 2010 00:56

AW: Sevezip.pas [ISO]
 
Welche Version der 7z.dll nutzt du denn überhaupt? Woher hast du sie? Installier dir halt das neueste 7zip und hol dir die DLL. Aber bitte das für 32bit, sonst bekommst wahrscheinlich Probleme.

-Phantom- 26. Nov 2010 01:15

AW: Sevezip.pas [ISO]
 
Hab ich gemacht. Und dann hab ich sie in dem Ordner kopiert wo auch meine .exe liegt. Ich hab nun sogar 3 verschiedene Dll's, die 7z.dll, 7za.dll und die 7-zip.dll aber es bringt nichts... Wenn ich mir das Programm runteralade und installiere bekomme ich nur die 7-zip.dll aber mit sevenzip.pas steuer ich die 7z.dll an meine ich

s.h.a.r.k 26. Nov 2010 01:17

AW: Sevezip.pas [ISO]
 
Ja klar, darin sind alle Funktionsaufrufe der DLL definiert. Woher hast denn überhaupt die pas-Datei? Vielleicht gibts dazu ja eine Doku?!

-Phantom- 26. Nov 2010 01:25

AW: Sevezip.pas [ISO]
 
Ja gibt es die hab ich auch. Die sevenpis.pas hab ich vor ca. 2 Monaten irgendwo runtergeladen wogenau weiß ich auch nicht mehr soll ich die für dich hoch laden?

s.h.a.r.k 26. Nov 2010 01:32

AW: Sevezip.pas [ISO]
 
Naja, vielleicht passt die ja nicht mehr zur DLL. Es wäre sinnvoller, wenn du mal ein minimales Projekt hochladen würdest, samt einer ISO-Testdatei, der DLL und der pas-Datei! Dann können wir das, wenn wir Zeit haben, den Fehler nachvollziehen und das ganze mal testen. Natürlich sollte jede Datei so klein wie möglich sein, um den Download klein zu halten! ;)

-Phantom- 26. Nov 2010 01:33

AW: Sevezip.pas [ISO]
 
Alles klar bin schon am Tippen^^

-Phantom- 26. Nov 2010 01:54

AW: Sevezip.pas [ISO]
 
Liste der Anhänge anzeigen (Anzahl: 1)
So inhalt : ISO-Testdatei, sevenzip.pas/dcu. 3 dll's und das mini Projekt

s.h.a.r.k 26. Nov 2010 04:04

AW: Sevezip.pas [ISO]
 
Habs mir jetzt mal etwas genauer angeschaut, nur werde ich daraus leider nicht wirklich schlau.
Delphi-Quellcode:
InArchive.Open(...)
liefert hier halt eine 1 zurück, was eigentlich eine 0 sein sollte. 0: heißt alles okay, 1: keine Ahnung was für ein Fehler.

Delphi-Quellcode:
// 7Zip plugin von http://www.progdigy.com/
// Zeile 1032
procedure T7zInArchive.OpenFile(const filename: string); stdcall;
var
  strm: IInStream;
begin
  strm := T7zStream.Create(TFileStream.Create(filename, fmOpenRead or fmShareDenyNone), soOwned);
  try
    RINOK(
      InArchive.Open(
        strm,
          @MAXCHECK, self as IArchiveOpenCallBack
        )
      );
  finally
    strm := nil;
  end;
end;
Und das Interface wird dabei angesprungen:
Delphi-Quellcode:
IInArchive = interface
  ['{23170F69-40C1-278A-0000-000600600000}']
    function Open(stream: IInStream; const maxCheckStartPosition: PInt64;
        openArchiveCallback: IArchiveOpenCallback): HRESULT; stdcall;
Tjo, und jetzt wäre eine Dokumentation recht, warum denn überhaupt diese 1 geliefert wird...

-Phantom- 26. Nov 2010 11:02

AW: Sevezip.pas [ISO]
 
wie kann man den verhindern das er eine "1" liefert?

DeddyH 26. Nov 2010 11:32

AW: Sevezip.pas [ISO]
 
Wenn das nicht dokumentiert ist, hast Du schlechte Karten.
Zitat:

Zitat von s.h.a.r.k (Beitrag 1064183)
Tjo, und jetzt wäre eine Dokumentation recht, warum denn überhaupt diese 1 geliefert wird...


-Phantom- 26. Nov 2010 11:51

AW: Sevezip.pas [ISO]
 
Was soll das den heißten "Dukomentiert"? Eine andere Frage. Ich doch bestimmt nicht der einzige hier der mit der sevenzip.pas jemals gearbeitet hat. Du muss dann ja das selbe Problem haben

DeddyH 26. Nov 2010 11:53

AW: Sevezip.pas [ISO]
 
Was heißt wohl "dokumentiert"? Dass jemand aufgeschrieben hat, wie die Routinen zu benutzen sind und was die Rückgabewerte bedeuten. Das kann eine README.txt oder sonst ein Dokument sein.

himitsu 26. Nov 2010 12:12

AW: Sevezip.pas [ISO]
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1064183)
Delphi-Quellcode:
InArchive.Open(...)
liefert hier halt eine 1 zurück, was eigentlich eine 0 sein sollte. 0: heißt alles okay, 1: keine Ahnung was für ein Fehler.

Tjo, und jetzt wäre eine Dokumentation recht, warum denn überhaupt diese 1 geliefert wird...

Zitat:

Zitat von HRESULT
S_OK = $00000000;
S_FALSE = $00000001;
...

aber Genaueres weis man nicht :stupid:

-Phantom- 26. Nov 2010 12:54

AW: Sevezip.pas [ISO]
 
Also ne Readme oder ähnliches war nicht dabei.

Luckie 26. Nov 2010 13:02

AW: Sevezip.pas [ISO]
 
Und auf der Homepage, gibt es da eine Dokumentation?

-Phantom- 26. Nov 2010 13:05

AW: Sevezip.pas [ISO]
 
Auf http://www.7-zip.de/index.html finde ich nicht wirklich was

//http://sourceforge.net/projects/cdisplayex/ (Delphi API für 7-Zip Plugins (7z, ZIP, RAR ...))


// Dort ist auch eine 7z.dll mit 160 KB mehr als meine // hat aber nichts gebracht


// Nun bin icht total verwirrt. Ich hab garde mit IZArc eine .lzh erstellt weil dieser "Cdisplayex" von 7zip eig. auch lzh-Archiv entpacken kann aber es geht nicht "Cannot load file ...". Dieser "Cdisplayerex" kann auch nur genau die selben Archiv entpacken die ich auch nur entpacken kann


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz