Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dll Eror


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо