Das Win32 API

LZ32.DLL: Funktionen zum Expandieren komprimierter Dateien

Die Bibliothek »lz32.dll« enthält 12 Funktionen, die alle dokumentiert sind. Sie dienen dem Expandieren und Kopieren von Dateien. Da Windows NT 4 und Windows 95 gepackte Dateien in »cab«-Files halten, werden diese Funktionen kaum noch eingesetzt. Sie dienen vorwiegend der Kompatibilität zu Windows 3.1. Die Dateien müssen mit dem Hilfsprogramm »compress.exe« von Microsoft für die Expand-Funktionen vorbereitet sein. Der Kompressionsalgorithmus ist relativ schlecht.

Normalerweise sind mit »compress.exe« gepackte Dateien daran zu erkennen, daß der letzte Buchstabe der Dateiendung durch einen Unterstrich ersetzt ist (».ex_« statt ».exe« etc). Das 16-Bit-Äquivalent der Bibliothek trägt den Namen »lzexpand.dll«. Außer den obsoleten Funktionen sind alle anderen in Delphi in der Datei »lzexpand.pas« definiert, sowohl in der 16-Bit-Version des Compilers als auch in den 32-Bit-Versionen.


GetExpandedName

Ermitteln des Original-Dateinamens

DLL Index 95 Index NT API-Version
LZExpand - - 16

Eine Funktion GetExpandedName ist im Win32-API nicht mehr definiert. Je nachdem, ob der Zeichensatz auf Byte- oder Word-Größe eingestellt ist, wird entweder die Funktion GetExpandedNameA oder die Funktion GetExpandedNameW verwendet.

GetExpandedNameA

Ermitteln des Original-Dateinamens bei Byte-Zeichensatz

DLL Index 95 Index NT API-Version
LZ32 09h 01h 95/NT

Funktion Parameter Rückgabewert
C:    
GetExpandedNameA Borland: LPSTR lpszSource  
  MS: LPTSTR lpszSource INT
  Borland: LPSTR lpszBuffer  
  MS: LPTSTR lpszBuffer  
Delphi:    
GetExpandedNameA Source: PAnsiChar INTEGER
  Buffer: PAnsiChar  

GetExpandedNameW

Ermitteln des Original-Dateinamens bei Wide-ANSI

DLL Index 95 Index NT API-Version
LZ32 0Bh 02h 95/NT

Funktion Parameter Rückgabewert
C:    
GetExpandedNameW LPWSTR lpszSource INT
  LPWSTR lpszBuffer  
Delphi:    
GetExpandedNameW Source: PWideChar INTEGER
  Buffer: PWideChar  


Diese Funktion ermittelt den Originaldateinamen einer mit »compress.exe« komprimierten Datei. Allerdings nur, wenn beim Packen der Parameter »/r« angegeben wurde. Ansonsten dupliziert die Funktion den in lpszSource angegebenen Namen nach lpszBuffer.

Parameter
lpszSource/Source: Zeigt auf einen String mit dem Namen der komprimierten Datei.
lpszBuffer/Buffer: Zeigt auf einen Puffer, der den Namen der komprimierten Datei aufnimmt.

Rückgabewert

Falls die Funktion erfolgreich abgeschlossen wird, wird der Wert 1 zurückgeliefert. Wenn die Funktion fehlschlägt, wird die Konstante LZERROR_BADVALUE gemeldet, die dem Wert -7 entspricht. Zu beachten ist, daß weder SetLastError noch SetLastErrorEx() von dieser Funktion berührt sind.


LZClose

Schließen einer LZ-Datei

DLL Index 95 Index NT API-Version
LZ32 05h 03h 95/NT

Funktion Parameter Rückgabewert
C:    
LZClose INT hFile VOID
Delphi:    
LZClose hFile: INTEGER PROCEDURE


Die Funktion schließt eine Datei, die mit LZOpenFile geöffnet wird. Übergeben werden muß der Handle der geöffneten Datei. Die Funktion/Prozedur liefert keinen Parameter zurück. Falls der Funktion ein Datei-Handle übergeben wurde, der mit CreateFile oder OpenFile aus »kernel32.dll« erzeugt wurde, tritt ein Fehler auf. Die beiden Handle-Typen sind nicht kompatibel!

Parameter
hFile Handle der geöffneten Datei


LZCopy

Kopieren einer LZ-komprimierten Datei

DLL Index 95 Index NT API-Version
LZ32 00h 04h 16/95/NT

Funktion Parameter Rückgabewert
C:    
LZCopy INT hfSource, LONG
  INT hfDest  
Delphi:    
LZCopy Source: INTEGER LongInt
  Dest: INTEGER  

Diese Funktion kopiert eine Quelldatei in eine Zieldatei. Falls die Quelldatei mit Microsofts »compress.exe« komprimiert wurde, wird die Datei hierbei automatisch entpackt, ansonsten wird ein Duplikat der Quelldatei erzeugt. Die Handles, die der Funktion für die beiden Dateien angegeben werden, müssen mit LZInit oder LZOpenFile angelegt worden sein. Man sollte hierbei jedoch grundsätzlich LZInit verwenden, da CopyLZFile nur noch aus Kompatibilität zum Win16-API überhaupt in der DLL vorhanden ist.

Parameter
hfSource/Source Handle auf die Quelldatei. Die kann, muß aber nicht komprimiert sein.
hfDest/Dest Handle für die Zieldatei. Falls die Funktion erfolgreich durchgeführt wurde, ist diese Datei immer unkomprimiert.

Rückgabewert

Falls die Funktion erfolgreich ausgeführt wurde, liefert sie als Wert die Zahl der kopierten Bytes, also die Größe der Zieldatei zurück. Falls die Funktion fehlschlägt, liefert sie einen Fehlercode kleiner als Null zurück. SetLastError und SetLastErrorEx werden von dieser Funktion nicht berührt.

Hier die Liste der möglichen Fehlercodes:
Konstante

Wert

Beschreibung
LZERROR_BADINHANDLE

-1

Der Handle auf die Quelldatei ist nicht gültig. Die Datei kann nicht gelesen werden.
LZERROR_BADOUTHANDLE

-2

Der Handle auf die Zieldatei ist nicht gültig. Die Datei kann nicht geschrieben werden.
LZERROR_GLOBALLOC

-5

Die maximale Anzahl geöffneter komprimierter Dateien ist überschritten oder es kann kein lokaler Speicher allokiert werden.
LZERROR_GLOBLOCK

-6

Der LZ-Datei-Handle kann nicht gesperrt werden.
LZERROR_READ

-3

Das Format der Quelldatei ist nicht gültig.


Das folgende Listing demonstriert das Initialisieren, Kopieren und Schließen einer Datei mit den LZ-Funktionen:

C:

int DoLZCopy(char *Source, char *Target)
{
  int SourceHandle, TargetHandle; result;
  OFSTRUCT *ReadStruct, *WriteStruct;

  ReadStruct.cBytes  = sizeof(OFSTRUCT);
  WriteStruct.cBytes = sizeof(OFSTRUCT);
  ReadStruct.fFixedDisk  = 1;  // Festplatte
  WriteStruct.fFixedDisk = 1;  // Festplatte
  strcpy(ReadStruct.szPathName,  Source);
  strcpy(WriteStruct.szPathName, Target);
  SourceHandle = LZOpenFile(Source, ReadStruct, OF_READ);
  if (SourceHandle < 0) 
    return SourceHandle;
  TargetHandle = LZOpenFile(Source, WriteStruct, OF_CREATE);
  if (TargetHandle < 0) {
    LZClose(SourceHandle);
    return (TargetHandle);
}
  result = LZCopy(SourceHandle, TargetHandle);
  LZClose(SourceHandle);
  LZClose(TargetHandle);
  return result;
}

Delphi:

FUNCTION DoLZCopy(Source, Target: PChar): INTEGER;
VAR
  SourceHandle, TargetHandle: INTEGER;
  ReadStruct, WriteStruct   : TOfStruct;
BEGIN
  ReadStruct.cBytes  := SizeOf(TOFStruct);
  WriteStruct.cBytes := SizeOf(TOFStruct);
  ReadStruct.fFixedDisk  := 1; { Festplatte }
  WriteStruct.fFixedDisk := 1; { Festplatte }
  StrCopy(ReadStruct.szPathName,  Source);
  StrCopy(WriteStruct.szPathName, Target);
  SourceHandle := LZOpenFile(Source, ReadStruct, OF_READ);
  IF SourceHandle < 0 THEN BEGIN
    Result := SourceHandle; Exit;
  END;
  TargetHandle := LZOpenFile(Target, WriteStruct, OF_CREATE);
  IF TargetHandle < 0 THEN BEGIN
    LZClose(SourceHandle);
    Result := TargetHandle; 
    Exit;
  END;
  Result := LZCopy(SourceHandle, TargetHandle);
  LZClose(SourceHandle);
  LZClose(TargetHandle);

END;

Querverweis

CopyLZFile, LZInit, LZOpenFile


LZInit

Initialisieren der LZ-Routinen

DLL Index 95 Index NT API-Version
LZ32 02h 06h 16/95/NT

Funktion Parameter Rückgabewert
C:    
LZInit INT hfSource INT
Delphi:    
LZInit Source: INTEGER INTEGER


Die Funktion LZInit allokiert Speicher für die internen Datenstrukturen, die notwendig sind, um eine Datei zu entpacken. Anschließend werden die Datenstrukturen erzeugt und initialisiert.

Parameter
hfSource/Source Handle der Quelldatei.

Rückgabewert

Falls die Funktion erfolgreich durchgeführt wurde, liefert sie den LZ-Datei-Handle. Falls die Funktion fehlschlägt, liefert sie eine der folgenden Fehlernummern. Beachten Sie bitte, daß die Funktionen SetLastError und SetLastErrorEx nicht berührt werden. LZInit wird von den Funktion LZOpenFileA und LZOpenFileW automatisch aufgerufen, wenn diesen der Dateiname einer gepackten Datei übergeben wird. Im Normalfall muß LZInit deshalb nicht aufgerufen werden.


Konstante

Wert

Beschreibung
LZERROR_BADINHANDLE

-1

Das Handle auf die Quelldatei ist nicht gültig. Die Datei kann nicht gelesen werden.
LZERROR_GLOBALLOC

-5

Die maximale Anzahl geöffneter komprimierter Dateien ist überschritten oder es kann kein lokaler Speicher allokiert werden.
LZERROR_GLOBLOCK

-6

Der LZ-Datei-Handle kann nicht gesperrt werden.
LZERROR_UNKNOWNALG

-8

Der Kompressionsalgorithmus wurde nicht erkannt. Die Datei wurde mit einem unbekannten Packalgorithmus komprimiert.


Bemerkungen

Gleichzeitig dürfen maximal 16 komprimierte Dateien geöffnet werden. Parallel können maximal auch 16 unkomprimierte Dateien geöffnet sein. Eine Applikation sollte also grundsätzlich den Handle einer Datei, die mit LZInit geöffnet wurde, auch wieder schließen, da sonst die Grenze von 16 geöffneten Dateien sehr schnell erreicht sein kann.

Der Handle dieser Funktion ist nur mit den Funktionen der »lz32.dll« kompatibel und kann nicht für andere Dateioperationen verwendet werden.


LZOpenFile

LZ-Datei vorbereiten und öffnen

Eine Funktion LZOpenFile ist im Win32-API nicht mehr definiert. Je nachdem, ob der Zeichensatz auf Byte- oder Word-Größe eingestellt ist, wird entweder die Funktion LZOpenFileA oder die Funktion LZOpenFileW verwendet.
DLL Index 95 Index NT API-Version
LZExpand - - 16

LZOpenFileA

LZ-Datei vorbereiten und öffnen für Byte-Character-Set

DLL Index 95 Index NT API-Version
LZ32 01h 07h 95/NT

Funktion Parameter Rückgabewert
C:    
LZOpenFileA Borland: LPSTR lpFileName  
  MS: LPTSTR lpFileName INT
  LPOFSTRUCT lpReOpenBuf  
  WORD wStyle  
Delphi:    
LZOpenFileA FileName: pANSIChar Integer
  VAR ReOpenBuf : TOFStruct;  
  Style: WORD  

LZOpenFileW

LZ-Datei vorbereiten und öffnen für Wide-ANSI-Zeichensatz

DLL Index 95 Index NT API-Version
LZ32 0Ah 08h 95/NT

Funktion Parameter Rückgabewert
C:    
LZOpenFileW LPWSTR lpFileName INT
  LPOFSTRUCT lpReOpenBuf  
  WORD wStyle  
Delphi:    
LZOpenFileW FileName: PWideChar; Integer
  VAR ReOpenBuf: TOFStruct;  
  Style: WORD  


Diese beiden Funktionen erzeugen, öffnen oder löschen eine Datei oder öffnen eine bereits vorher geöffnete Datei erneut.

Parameter
lpFileName Zeigt auf eine Zeichenkette mit dem Namen der Datei.
lpReOpenBuf
Zeigt auf eine Struktur vom Typ OFSTRUCT, der Informationen zur Datei enthalten muß, wenn die Datei zum ersten Mal geöffnet wird. Die Struktur kann anschließend bei verschiedenen Aufrufen zu der mit LZOpenFile geöffneten Datei immer wieder verwendet werden. Der Member szPathName enthält die Zeichen des Namens.
wStyle Gibt die Art der Aktion an, die auf die Datei ausgeübt werden soll. Dieser Parameter kann eine Kombination der Werte aus der folgenden Tabelle sein:


Konstante

Wert

Bedeutung
OF_READ

0000h

Öffnet die Datei nur zum Lesen.
OF_WRITE

0001h

Öffnet die Datei nur zum Schreiben.
OF_READWRITE

0002h

Öffnet die Datei zum Lesen und Schreiben.
OF_SHARE_EXCLUSIVE

0010h

Öffnet die Datei im exklusiven Modus, wobei anderen Prozessen untersagt wird, lesend und schreibend auf diese Datei zuzugreifen. LZOpenFile schlägt fehl, wenn die Datei bereits in einem anderen Modus für den Lese- oder Schreibzugriff geöffnet wurde, selbst wenn dies durch den aktuellen Prozeß vorgenommen wurde.
OF_SHARE_DENY_WRITE

0020h

Öffnet die Datei, wobei anderen Prozessen untersagt wird, schreibend auf diese Datei zuzugreifen. LZOpenFile schlägt fehl, wenn die Datei bereits durch einen anderen Prozeß im Kompatibilitätsmodus oder zum Schreiben geöffnet wurde
OF_SHARE_DENY_READ

0030h

Öffnet die Datei, wobei anderen Prozessen untersagt wird, lesend auf diese Datei zuzugreifen. LZOpenFile schlägt fehl, wenn die Datei bereits durch einen anderen Prozeß im Kompatibilitätsmodus oder zum Lesen geöffnet wurde.
OF_SHARE_DENY_NONE

0040h

Öffnet die Datei, ohne anderen Prozessen den Lese- oder Schreibzugriff zu verweigern. LZOpenFile schlägt fehl, wenn die Datei von einem anderen Prozeß bereits im Kompatibilitätsmodus geöffnet wurde.
OF_PARSE

0100h

Füllt die Struktur OFSTRUCT, führt sonst aber keine weiteren Aktionen durch.
OF_DELETE

0200h

Löscht die Datei.
OF_CANCEL

0800h

Wird ignoriert. Im Win32-API wird der Stil OF_PROMPT verwendet, um eine Dialogbox mit dem Button [Abbrechen] zu erzeugen. Nur aus Kompatibilitätsgründen zum Win16-API definiert.
OF_CREATE

1000h

Weist LZOpenFile an, eine neue Datei zu erzeugen. Wenn die Datei bereits existiert, wird sie auf eine Länge von 0 abgeschnitten.
OF_PROMPT

2000h

Zeigt eine Dialogbox an, wenn die verlangte Datei nicht vorhanden ist. Der Dialog weist den Anwender darauf hin, daß Windows die Datei nicht finden kann und enthält einen Button [Wiederholen] und einen Button [Abbrechen]. Die Wahl des Buttons [Abbrechen] erzeugt die Fehlermeldung »Datei nicht gefunden«.
OF_EXIST

4000h

Öffnet die Datei und schließt sie wieder, um ihr Vorhandensein zu überprüfen.
OF_REOPEN

8000h

Öffnet die Datei und verwendet dazu die Informationen im Reopen-Puffer

Flags für wStyle von LZOpenFileA/W


Rückgabewert

Diese Codes sind alle kleiner als 9.

Beachten Sie, daß die LZOpenFile-Funktionen weder SetLastError noch SetLastErrorEx aufrufen und deshalb auch die Fehlercodes des Threads nicht betroffen sind.

Hier die Liste der Fehlercodes, die von LZOpenFile zurückgegeben werden können:

Konstante

Wert

Bedeutung
LZERROR_BADINHANDLE

-1

Das Handle auf die Quelldatei ist nicht gültig. Die Datei kann nicht gelesen werden.
LZERROR_GLOBALLOC

-5

Die maximale Anzahl geöffneter komprimierter Dateien ist überschritten oder es kann kein lokaler Speicher allokiert werden.


Bemerkungen

Falls als Parameter für wStyle das Flag OF_READ (oder OF_READ und eines der OF_SHARE_-Flags) vorhanden und die Datei gepackt ist, ruft LZOpenFile die Routine LZInit auf, die die benötigte Initialisierung für das Entpacken durchführt.

Der Handle, den diese Funktion zurückliefert, ist nur mit den Funktionen der »lz32.dll« kompatibel. Er darf nicht für andere Dateioperationen verwendet werden.

Das folgende Listing demonstriert das Initialisieren, Kopieren und Schließen einer Datei mit den LZ-Funktionen:

C:

int DoLZCopy(char *Source, char *Target)
{
  int SourceHandle, TargetHandle; result;
  OFSTRUCT *ReadStruct, *WriteStruct;
  ReadStruct.cBytes  = sizeof(OFSTRUCT);
  WriteStruct.cBytes = sizeof(OFSTRUCT);
  ReadStruct.fFixedDisk  = 1;  // Festplatte!
  WriteStruct.fFixedDisk = 1;  // Festplatte!
  strcpy(ReadStruct.szPathName,  Source);
  strcpy(WriteStruct.szPathName, Target);
  SourceHandle = LZOpenFileA(Source, ReadStruct, OF_READ);
  if (SourceHandle < 0) 
    return SourceHandle;
  TargetHandle = LZOpenFileA(Source, WriteStruct, OF_CREATE);
  if (TargetHandle < 0)
  {
    LZClose(SourceHandle);
    return (TargetHandle);
  }
  result = LZCopy(SourceHandle, TargetHandle);
  LZClose(SourceHandle);
  LZClose(TargetHandle);
  return result;
}

Delphi:

FUNCTION DoLZCopy(Source, Target: PChar): INTEGER;
VAR
  SourceHandle, TargetHandle: INTEGER;
  ReadStruct, WriteStruct   : TOfStruct;
BEGIN
  ReadStruct.cBytes  := SizeOf(TOFStruct);
  WriteStruct.cBytes := SizeOf(TOFStruct);
  ReadStruct.fFixedDisk  := 1; { Festplatte! }
  WriteStruct.fFixedDisk := 1; { Festplatte! }
  StrCopy(ReadStruct.szPathName,  Source);
  StrCopy(WriteStruct.szPathName, Target);
  SourceHandle := LZOpenFileA(Source, ReadStruct, OF_READ);
  IF SourceHandle < 0 THEN BEGIN
    Result := SourceHandle; Exit;
  END;
  TargetHandle := LZOpenFileA(Target, WriteStruct, OF_CREATE);
  IF TargetHandle < 0 THEN BEGIN
    LZClose(SourceHandle);
    Result := TargetHandle; 
    Exit;
  END;
  Result := LZCopy(SourceHandle, TargetHandle);
  LZClose(SourceHandle);
  LZClose(TargetHandle);

END;

Es handelt sich bei diesem Listing um eine komplette Funktion, die aber nur von Festplatte zu Festplatte funktioniert, da OFSTRUCT.fFixedDisk der Wert 1 fest übergeben wird.

Die Struktur OFSTRUCT enthält Informationen über eine Datei, die mit der LZOpenFileA/LZOpenFileW-Funktion geöffnet wird oder geöffnet werden soll. Sie ist folgendermaßen definiert:

C: Delphi: Bemerkung
#define OFS_MAXPATHNAME 128 OFS_MAXPATHNAME = 128 Konstante, definiert in »winbase.h«/»windows.pas«
  POFStruct = ^TOFStruct  
typedef struct _OFSTRUCT { TOFStruct = Record  
BYTE cBytes; cBytes: Byte; Angabe der Länge der Struktur in Byte
BYTE fFixedDisk; fFixedDisk: Byte; Angabe, ob die Datei sich auf einer Festplatte befindet. Der Wert ist ungleich 0, wenn sich die Datei auf einer Festplatte befindet und 0, wenn es sich um einen austauschbaren Datenträger handelt.
WORD nErrCode; nErrCode: Word; Angabe des MS-DOS-Fehlercodes, wenn die LZOpen-Funktion fehlschlägt.
WORD Reserved1; Reserved1: Word; Reserviert, nicht verwenden.
WORD Reserved2; Reserved2: Word; Reserviert, nicht verwenden.
CHAR szPathName[OFS_MAXPATHNAME]; szPathName: Array [0..OFS_MAXPATHNAME-1] of Char; Pfad und Name der Datei.
} OFSTRUCT; End;  


Querverweis

LZClose, LZInit


LZRead

Daten aus einer LZ-Datei lesen

DLL Index 95 Index NT API-Version
LZ32 04h 09h 16/95/NT

Funktion Parameter Rückgabewert
C:    
LZRead INT hFile INT
  LPSTR lpBuffer  
  INT cbRead  
Delphi:    
LZRead hFile: Integer Integer
  Buffer: LPSTR  
  Count: Integer  


Diese Funktion liest die angegebene Anzahl von Bytes aus einer Quelldatei und kopiert sie in einen Puffer.

Parameter
hFile Handle auf die Quelldatei.
lpBuffer Zeiger auf den Puffer, der die Bytes aus der Datei aufnehmen soll.
cbRead Angabe der Zahl der zu lesenden Bytes.

Rückgabewert

Hier die Liste der möglichen Fehlercodes, die LZRead beim Auftreten eines Fehlers zurückliefern kann:
Konstante

Wert

Bedeutung
LZERROR_BADINHANDLE

-1

Das Handle auf die Quelldatei ist nicht gültig. Die Datei kann nicht gelesen werden.
LZERROR_BADOUTHANDLE

-2

Das Handle auf die Zieldatei ist nicht gültig. Die Datei kann nicht geschrieben werden.
LZERROR_BADVALUE

-7

Einer der Eingabeparameter ist nicht gültig.
LZERROR_GLOBALLOC

-5

Die maximale Anzahl geöffneter komprimierter Dateien ist überschritten oder es kann kein lokaler Speicher allokiert werden.
LZERROR_GLOBLOCK

-6

Der LZ-Datei-Handle kann nicht gesperrt werden.
LZERROR_READ

-3

Das Format der Quelldatei ist nicht gültig.
LZERROR_WRITE

-4

Zu wenig Platz auf dem Datenträger für die Zieldatei.


Anmerkungen

Der Handle auf die Datei muß entweder durch die Funktion LZInit oder LZOpenFile erzeugt worden sein. Falls die Datei komprimiert ist, emuliert LZRead die Funktion _lread auf eine expandierte Kopie der Datei und kopiert anschließend die Datenbytes in den angegebenen Puffer.

Applikationen müssen bei komprimierten Dateien grundsätzlich die Funktionen LZOpenFile, LZSeek und LZRead anstelle der Funktionen OpenFile, _llseek und _lread aufrufen.

Querverweis:

LZInit, LZOpenFile, LZSeek


LZSeek

LZ-Dateizeiger setzen

DLL Index 95 Index NT API-Version
LZ32 03h 0Ah 16/95/NT

Funktion Parameter Rückgabewert
C:    
LZSeek INT hFile LONG
  LONG lOffset  
  INT iOrigin  
Delphi:    
LZSeek hFile: Integer LongInt
  Offset: Longint  
  Origin: Integer  


Die Funktion LZSeek bewegt den Dateizeiger um eine bestimmte Anzahl Bytes von einer anzugebenden Startposition aus.

Parameter
hFile Das Handle auf die Quelldatei.
lOffset/Offset Dateioffset in Byte, auf das der Zeiger bewegt werden soll.
iOrigin/Origin Angabe der Startadresse für die Zeigerbewegung. Der Parameter muß einer der Werte aus der folgenden Tabelle sein.

Wert Bedeutung
0 Bewegt den Dateizeiger um lOffset Byte ab Dateibeginn.
1 Bewegt den Dateizeiger um lOffset Byte ab der aktuellen Position des Dateizeigers.
2 Bewegt den Dateizeiger um lOffset Byte ab dem Dateiende.


Rückgabewert

Falls die Funktion erfolgreich durchgeführt wurde, ist der Rückgabewert der Offset vom Dateibeginn zur neuen Position in der Datei.

Falls die Funktion fehlschlägt, liefert sie einen Fehlercode kleiner als 0 zurück. Die möglichen zurückgelieferten Konstantenwerte sind:
Konstante

Wert

Bedeutung
LZERROR_BADINHANDLE

-1

Das Handle auf die Quelldatei ist nicht gültig. Die Datei kann nicht gelesen werden.
LZERROR_BADVALUE

-7

Einer der Parameter ist außerhalb des gültigen Bereichs.
LZERROR_GLOBLOCK

-6

Der LZ-Datei-Handle kann nicht gesperrt werden.


Bemerkungen

LZSeek ruft weder SetLastError noch SetLastErrorEx auf und betrifft deshalb auch nicht die Fehlercodes des Threads.

Der Handle auf die Datei, der im Parameter hFile angegeben wird, muß entweder durch die Funktion LZInit oder LZOpenFile erzeugt worden sein.

Falls die Datei komprimiert ist, emuliert LZRead die Funktion _llseek auf eine expandierte Kopie der Datei.

Querverweis

LZInit, LZOpenFile



Funktionen, die nicht mehr verwendet werden sollen

Zum Win16-API gehört die Datei »lzexpand.dll«, die als Vorläufer der »lz32.dll« die folgenden drei Funktionen ebenfalls implementierte. Aus Kompatibilitätsgründen sind diese Funktion in der »lz32.dll« zwar ebenfalls definiert, sie sollten jedoch nicht mehr eingesetzt werden. Es besteht auch keine Garantie, daß diese Funktion in späteren Windows-Versionen noch enthalten sein werden. In der Version Beta 2 von Windows 98 sind sie allerdings noch vorhanden.

Da das Win16-API auch die nun zu verwendenden Funktionen enthält, sollten auch bei Programmen, die für das Win16- und das Win32-API parallel entwickelt werden, die neuen Routinen eingesetzt werden.


LZStart

LZ-Routinen einleiten (veraltet)

DLL Index 95 Index NT API-Version
LZ32 06h 0Bh 16/95/NT


Funktion Parameter Rückgabewert
C:    
LZStart - INT
Delphi:    
LZStart - Integer


Die Funktion LZStart ist eigentlich obsolet. Sie ist nur noch aus Kompatibilitätsgründen zum Win16-API in der DLL enthalten. Win32-basierte Programme sollten die Funktion LZCopy verwenden.


CopyLZFile

LZ-Datei kopieren (veraltet)

DLL Index 95 Index NT API-Version
LZ32 07h 00h 16/95/NT

Funktion Parameter Rückgabewert
C:    
CopyLZFile INT hfSource LONG
  INT hfDest  
Delphi:    
CopyLZFile Source: Integer LongInt
  Dest: Integer  


Die Funktion CopyLZFile ist eigentlich obsolet. Sie ist nur noch aus Kompatibilitätsgründen zum Win16-API in der DLL enthalten. Win32-basierte Programme sollten die Funktion LZCopy verwenden


LZDone

LZ-Routinen beenden (veraltet)

DLL Index 95 Index NT API-Version
LZ32 08h 05h 16/95/NT

Funktion Parameter Rückgabewert
C:    
LZDone - -
Delphi:    
LZDone - PROCEDURE


Die Funktion LZDone ist obsolet. Sie ist nur noch aus Kompatibilitätsgründen zum Win16-API in der DLL enthalten. Win32-basierte Programme sollten die Funktion LZOpenFile verwenden.


Haftungsausschlu√ü¬© C&L Computer- und Literaturverlag GmbH 2001-> Mail an C&L