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

Вниз

Передача строки PChar в библиотеку   Найти похожие ветки 

 
Dimaxx ©   (2003-12-12 16:19) [0]

Спецы! Не могу понять причину следующего:

Вот кусок кода библиотеки BZip2:

var IData,OData,ZData: TStream;

procedure CompressFile(IFile,OFile: PChar); stdcall;
begin
IData:=TFileStream.Create(IFile,fmOpenRead);
OData:=TFileStream.Create(OFile,fmCreate or fmOpenWrite);
ZData:=TBZCompressionStream.Create(BS9,OData);
ZData.CopyFrom(IData,IData.Size);
ZData.Free;
OData.Free;
IData.Free;
end;

procedure DecompressFile(IFile,OFile: PChar); stdcall;
var C: integer;
M: pointer;
begin
IData:=TFileStream.Create(IFile,fmOpenRead);
OData:=TFileStream.Create(OFile,fmCreate or fmOpenWrite);
ZData:=TBZDecompressionStream.Create(IData);
GetMem(M,65536);
while True do
begin
C:=ZData.Read(M^,65536);
if C<>0 then OData.WriteBuffer(M^,C) else Break;
end;
FreeMem(M,65536);
ZData.Free;
OData.Free;
IData.Free;
end;

exports
CompressFile,DecompressFile;


Вызов из программы:

procedure CompressFile(IFile,OFile: PChar); external "BZip2.dll" name "CompressFile";
procedure DecompressFile(IFile,OFile: PChar); external "BZip2.dll" name "DecompressFile";

begin
CompressFile("1.dat","1.dat.bz2");
DecompressFile("1.dat.bz2","2.dat");
end.


Получаем ошибку EFOpenError - "невозможно открыть файл" и вместо имени файла крякозябры! Кто перевирает имя файла! И как лучше его передать? Не работает даже такой код!

var S1,S2: string;

S1:="1.dat";
S2:="1.dat.bz2";
CompressFile(PChar(S1),PChar(S2));

S1:="1.dat.bz2";
S2:="2.dat";
DecompressFile(PChar(S1),PChar(S2));


Хотя если все это объединить в одно консольное приложение - первый вариант вызова работает на ура... Как у Чернышевского "Что делать?"


 
panov ©   (2003-12-12 16:32) [1]

Сначала исправь вот это -
procedure CompressFile(IFile,OFile: PChar); external "BZip2.dll" name "CompressFile"; stdcall;
procedure DecompressFile(IFile,OFile: PChar); external "BZip2.dll" name "DecompressFile"; stdcall;


 
Dimaxx ©   (2003-12-12 22:51) [2]

Во, млин, это ж надоть такую муть пропустить!!! Старею...



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

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

Наверх




Память: 0.47 MB
Время: 0.017 c
1-86440
Jelet
2003-12-12 17:20
2003.12.26
отобразить RTF


1-86360
Stant
2003-12-11 23:42
2003.12.26
Как показать многострочный HINT


3-86269
_jek
2003-12-01 13:23
2003.12.26
ADO и процедура в ACCESS


3-86304
DDP1
2003-12-02 13:10
2003.12.26
Постраничная выборка в ADO


1-86423
V
2003-12-13 13:48
2003.12.26
как сделать заставку для программы?