Форум: "Основная";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизКомпонент 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c