Folgende Situation:
Eine Exe-Datei mit einer zusätzlich angehängten Datei (copy /b foo.exe + test.mp3 bar.exe). Die reesultierende Exe ist noch lauffähig.
Zweites Programm beinhaltet eine Funktion, die die angehängte Datei extrahieren soll. Soll mal ein SFX Archiver werden, also in ansätzen. damit ich nicht jedes mal die Dateigröße anpassen muss, arbeite ich mit zwei Anwendungen. Später wenn der
Code steht und somit die Größte bekannt ist, kommt alls in die Exe, an die eine Datei angehängt werden kann.)
Folgender Source macht Probleme:
Delphi-Quellcode:
const
FILESIZE = 359424;
BLOCKSIZE = 65535;
function Min(x, y: Cardinal): Integer;
begin
if x < y
then
result := x
else
result := y;
end;
function Extract(SFXArchive, DestFile:
String; SFXFileSize: LongInt): Integer;
var
FSFXArchive, FDestFile:
File;
MemBuffer :
array [0..BLOCKSIZE]
of Byte;
BytesToRead, BytesRead: Integer;
begin
SetLastError(0);
BytesToRead := sizeof(MemBuffer);
{$IOCHECKS OFF}
AssignFile(FSFXArchive, SFXArchive);
Reset(FSFXArchive, 1);
// ohne Komma 1 geht er nicht in die Schleife rein
if IOResult = 0
then
begin
AssignFile(FDEstFile, DestFile);
Rewrite(FDestFile);
if IOResult = 0
then
begin
Seek(FSFXArchive, SFXFileSize);
while (BytesToRead > 0)
and (
not EOF(FSFXArchive))
do
begin
BlockRead(FSFXArchive, MemBuffer, Min(sizeof(MemBuffer), BytesToRead),
BytesRead);
BlockWrite(FDestFile, MemBuffer, BytesRead);
Dec(BytesToRead, sizeof(MemBuffer));
writeln(BytesToRead);
end;
end;
CloseFile(FDestFile);
end;
CloseFile(FSFXArchive);
{$IOCHECKS ON}
result := GetLastError();
end;
Als Fehlermeldung bekomme ich:
Zitat:
---------------------------
Extractor
---------------------------
Der angegebene Benutzerpuffer ist für den angeforderten Vorgang nicht zulässig
---------------------------
OK
---------------------------