Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Компонент TDFUnRar кто-то использовал ?   Найти похожие ветки 

 
$Инъектор   (2006-01-17 11:48) [0]

Кто юзал компонент TDFunRar - кинте какойто пример.
В readme.txt список функций (конкретно никакого примера).

(Я скопировал unrar.dll в каталог с программой, добавил компоненты на форму).

Например в  результате сл. действий ничего не происходит.

procedure TForm1.Button1Click(Sender: TObject);
begin
dfunrar1.FileName:="d:\archiv.rar";
dfunrar1.Extract;
end;


Никаких функций -- куда распаковывать и получить коды ошибок (если такие были не происходит, то есть в исходниках опис. ошибки но как их "взять" ?). Как просто распаковать архив ?


 
$Инъектор   (2006-01-17 13:31) [1]

Этот модуль взятый из FAQ (работа c rar, исп. unrar.dll). Почему выдаются ошибки ?  Я его засунул в своё приложение. Ошибки выделены жирным цветом.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DFUnRar, StdCtrls, ComCtrls;

function RAROpenArchive(ArchiveData : Pointer): Integer; stdcall;
external "unrar.dll" name "RAROpenArchive";

function RARCloseArchive(hArcData : Integer): Integer; stdcall;
external "unrar.dll" name "RARCloseArchive";

function RARReadHeader(hArcData : Integer; HeaderData : Pointer):
Integer; stdcall;
external "unrar.dll" name "RARReadHeader";

function RARProcessFile(hArcData : Integer; Operation : Integer;
DestPath : Pointer; DestName : Pointer): Integer; stdcall;
external "unrar.dll" name "RARProcessFile";

 const
 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;

 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;

type
 TForm1 = class(TForm)
   Button1: TButton;
   ProgressBar1: TProgressBar;
   ProgressBar2: TProgressBar;
   procedure ExtractRARArchive;

 private
   { Private declarations }
 public
   { Public declarations }
 end;

 Char260 = array [1..260] of Char;

 TRAROpenArchiveData = record
   ArcName : PChar; // a C++ yoi aoaao auaeyaaou eae: char *ArcName
   OpenMode : Cardinal;
   OpenResult : Cardinal;
   CmtBuf : PChar;
   CmtBufSize : Cardinal;
   CmtSize : Cardinal;
   CmtState : Cardinal;
 end;

 TRARHeaderData = record
   ArcName : Char260;
   FileName : Char260;
   Flags : Cardinal;
   PackSize : Cardinal;
   UnpSize : Cardinal;
   HostOS : Cardinal;
   FileCRC : Cardinal;
   FileTime : Cardinal;
   UnpVer : Cardinal;
   Method : Cardinal;
   FileAttr : Cardinal;
   CmtBuf : PChar;
   CmtBufSize : Cardinal;
   CmtSize : Cardinal;
   CmtState : Cardinal;
 end;

var
 Form1: TForm1;
 RARExtract : boolean;
 RAROpenArchiveData : TRAROpenArchiveData;
 RARComment : array [1..256] of Char;
 RARHeaderData : TRARHeaderData;

implementation

{$R *.dfm}

procedure tform1.ExtractRARArchive;

var
 sDir : string;
 s : string;
 sTest : string;
 iTest : integer;
 bTestDone : boolean;
 RARhnd : Integer;
 RARrc : Integer;
 PDestPath : Char260;

begin
ProgressBar1.Position:=50;
 RARExtract:=TRUE;
 lKBWritten:=0;
 ProgressBar2.Position := 0;
ProgressBar2.Max := lTotalSize;
 RARStartTime:=Time;

 RAROpenArchiveData.OpenResult:=99;
 RAROpenArchiveData.OpenMode := RAR_OM_EXTRACT; // ioe?uaaai aey ?aniaeiaee
 RAROpenArchiveData.ArcName:= @RARFileName;
 RAROpenArchiveData.CmtBuf := @RARComment;
 RAROpenArchiveData.CmtBufSize := 255;

 // Ioe?uaaai RAR a?oea e auaaeyai iaiyou
 RARhnd := RAROpenArchive (@RAROpenArchiveData);
 if RAROpenArchiveData.OpenResult <> 0 then
 begin
   case RAROpenArchiveData.OpenResult of
     ERAR_NO_MEMORY   : s:="Not enough memory to initialize data structures";
     ERAR_BAD_DATA    : s:="Archive header broken";
     ERAR_BAD_ARCHIVE : s:="File is not valid RAR archive";
     ERAR_EOPEN       : s:="File open error";
   end;
   MessageDlg("Unable to open rar archive: " + s + "!",mtError, [mbOK], 0);
 end;

 RARSetProcessDataProc(RARhnd,@Form.OnRarStatus);
 StrPCopy(@PDestPath, EInstallPath.Text);

 repeat
   RARrc := RARReadHeader (RARhnd, @RARHeaderData);// ?eoaai caaieiaie
   if RARrc <> ERAR_END_ARCHIVE then
   begin
     ProgressBar1.Position := 0;
     ProgressBar1.Max := RARHeaderData.UnpSize;
     s:=RARHeaderData.FileName;
     lblCurrentFile.Caption := s;
     lKBytesDone := 0;
   end;

   if RARrc = 0 then
     RARrc:=RARProcessFile (RARhnd, RAR_EXTRACT, @PDestPath, nil);
   if (RARrc <> 0) and (RARrc <> ERAR_END_ARCHIVE) then
   begin
     MessageDlg("An Error occured during extracting of " + sTest+"!" + #13#10 +
     "RARProcessFile: " + MakeItAString(RARrc),mtError, [mbOK], 0);
   end;
 until
   RARrc <> 0;

 // cae?uaaai RAR a?oea e inaiai?aaai iaiyou
 if RARCloseArchive(RARhnd) <> 0 then
 begin
   MessageDlg("Unable to close rar archive!",mtError, [mbOK], 0);
 end;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
2-1138686124
Mike48
2006-01-31 08:42
2006.02.19
315-й вопрос про ehlib


2-1138628089
Neo Trinitron
2006-01-30 16:34
2006.02.19
Иконки зарегистрированных типов


15-1138453656
PARUS
2006-01-28 16:07
2006.02.19
Компоненты Delphi (2005).


15-1138632839
Arazel
2006-01-30 17:53
2006.02.19
Где можно прочитать про Характиристику MSSQL


15-1138362588
DillerXX
2006-01-27 14:49
2006.02.19
Ноутбук - что посоветуете счастливому обладателю? :)