![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
dll Eror
IXT © (2004-08-23 10:13:00)Есть библиотечка:
library WinPKZip;
uses
SysUtils,
Classes, Dialogs,
zf in 'zf.pas' {Form1};
{$R *.res}
procedure CreateZipArhive(zipfilename: PChar; maskfiles: PChar); StdCall;
begin
zf.Form1.ZipForge1.FileName:=StrPas(zipfilename);
zf.Form1.ZipForge1.OpenArchive(fmCreate);
zf.Form1.ZipForge1.AddFiles(StrPas(maskfiles));
try
zf.Form1.ZipForge1.TestFiles('*.*');
except
MessageDlg('Errors occurred in the archive file',mtError,[mbOk],0);
end;
zf.Form1.ZipForge1.CloseArchive;
end;
exports
CreateZipArhive;
begin
end.
Вызываю процедурру из нее, а выдает Acceess Violation in WinPKZip;
Вызываю так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure CreateZipArhive(zipfilename: PChar; maskfiles: PChar); StdCall;
var
Form1: TForm1;
implementation
procedure CreateZipArhive; external 'WinPKZip.dll' name 'CreateZipArhive';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateZipArhive(PChar('c:\111.zip'),PChar('c:\*.txt'));
end;
end.
Что я сделал не так???
IXT (2004-08-23 12:48:00) [21]А разве
pstr1:='c:\111.zip';не выделит память?
IXT (2004-08-23 10:50:00) [22]Поменял, но выскакивает таже ошибка
procedure TForm1.Button1Click(Sender: TObject);
var
pstr1,pstr2:PChar;
begin
// Если указатель идёт во вне под него необходимо выделить память!
GetMem(pstr1,sizeof('c:\111.zip'));
GetMem(pstr2,sizeof('c:\*.txt'));
pstr1:='c:\111.zip';
pstr2:='c:\*.txt';
CreateZipArhive(pstr1,pstr2);
// Этот код в дельфи 7, не особо нужен, она сама указатели чистит
//FreeAndNil(pstr1);
//FreeAndNil(pstr2);
// CreateZipArhive(PChar('c:\111.zip'),PChar('c:\*.txt'));
end;
P.S.
(D7, WinME)
tesseract (2004-08-23 10:38:00) [23]
PChar('что-то')
Так низя надо примерно так:
var
pstr1,pstr2:PChar;
begin
// Если указатель идёт во вне под него необходимо выделить память!
GetMem(pstr1,sizeof('c:\111.zip'));
GetMem(pstr2,sizeof('c:\*.txt'));
pstr1:='c:\111.zip';
pstr2:='c:\*.txt';
CreateZipArhive(pstr1,pstr2);
// Этот код в дельфи 7, не особо нужен, она сама указатели чистит
FreeAndNil(pstr1);
FreeAndNil(pstr2);
end;