Bagikan melalui


Fungsi dekompresi (compressapi.h)

Mengambil blok informasi terkompresi dan mendekompresinya.

Sintaks

BOOL Decompress(
  [in]  DECOMPRESSOR_HANDLE DecompressorHandle,
  [in]  LPCVOID             CompressedData,
  [in]  SIZE_T              CompressedDataSize,
  [out] PVOID               UncompressedBuffer,
  [in]  SIZE_T              UncompressedBufferSize,
  [out] PSIZE_T             UncompressedDataSize
);

Parameter

[in] DecompressorHandle

Menangani dekompresor yang dikembalikan oleh CreateDecompressor.

[in] CompressedData

Berisi blok informasi yang akan didekompresi. Ukuran dalam byte blok terkompresi diberikan oleh CompressedDataSize.

[in] CompressedDataSize

Ukuran dalam byte informasi terkompresi.

[out] UncompressedBuffer

Buffer yang menerima informasi yang tidak dikompresi. Ukuran dalam byte buffer diberikan oleh UncompressedBufferSize.

[in] UncompressedBufferSize

Ukuran dalam byte buffer yang menerima informasi yang tidak dikompresi.

[out] UncompressedDataSize

Ukuran aktual dalam byte dari informasi yang tidak dikompresi yang diterima.

Menampilkan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol. Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Jika blok data terkompresi yang ditunjukkan oleh CompressedData rusak, fungsi dapat gagal dan kesalahan dari GetLastError dapat ERROR_BAD_COMPRESSION_BUFFER. Ada kemungkinan juga bahwa fungsi akan menghasilkan blok data yang tidak dikompresi yang tidak cocok dengan data asli.

Disarankan agar kompresor dan dekompresor tidak menggunakan bendera COMPRESS_RAW . Jika kompresor dibuat dengan bendera COMPRESS_RAW , dekompresor juga harus dibuat dengan bendera COMPRESS_RAW .

Jika kompresor dan dekompresor dibuat menggunakan bendera COMPRESS_RAW , nilai UncompressedBufferSize harus sama persis dengan ukuran asli data yang tidak dikompresi dan bukan hanya ukuran buffer output. Ini berarti Anda harus menyimpan ukuran asli yang tepat dari data yang tidak dikompresi, serta data terkompresi dan ukuran terkompresi, saat menggunakan bendera COMPRESS_RAW . Jika UncompressedBufferSize tidak sama dengan ukuran asli data yang tidak dikompresi, data yang tidak dikompresi tidak akan cocok dengan data asli. Dalam hal ini, fungsi dapat mengembalikan keberhasilan atau dapat mengembalikan ERROR_BAD_COMPRESSION_BUFFER.

Jika bendera COMPRESS_RAW tidak digunakan, UncompressedBufferSize tidak diperlukan sama persis dengan ukuran asli data yang tidak dikompresi. Dalam hal ini, UncompressedDataSize mengembalikan ukuran asli data yang tidak dikompresi. Jika UncompressedBufferSize lebih kecil dari ukuran data asli, fungsi akan gagal dan mengatur UncompressedDataSize ke ukuran data asli dan kesalahan dari GetLastErrorERROR_INSUFFICIENT_BUFFER.

Untuk menentukan seberapa besar uncompressedBuffer , panggil fungsi dengan UncompressedBufferSize diatur ke nol. Dalam hal ini, fungsi akan gagal dan mengatur UncompressedDataSize ke ukuran data asli dan kesalahan dari GetLastErrorERROR_INSUFFICIENT_BUFFER. Perhatikan bahwa ukuran asli yang dikembalikan oleh fungsi diekstraksi dari buffer itu sendiri dan harus diperlakukan sebagai tidak tepercaya dan diuji terhadap batas yang wajar.

Jika fungsi dipanggil dengan parameter CompressedDataSize diatur ke nol, fungsi gagal dan kesalahan dari GetLastErrorERROR_INSUFFICIENT_BUFFER. Ketika gagal, fungsi mengembalikan dengan UncompressedDataSize diatur ke nilai yang dapat Anda gunakan untuk menghindari alokasi buffer yang terlalu besar untuk data terkompresi. Anda harus mengetahui ukuran maksimum yang mungkin dari data asli untuk menggunakan metode ini.

Jika Anda mengatur CompressedDataSize ke nol, dan mengatur UncompressedBufferSize ke ukuran maksimum yang mungkin dari data asli yang tidak dikompresi, fungsi Dekompresi akan gagal seperti yang dijelaskan dan nilai UncompressedDataSize akan diatur ke ukuran maksimum untuk buffer data terkompresi.

Jika algoritma kompresi gagal karena beberapa alasan internal, kesalahan dari GetLastError dapat ERROR_FUNCTION_FAILED. Jika sistem tidak dapat menemukan handel algoritma kompresi, kesalahan dapat ERROR_INVALID_HANDLE. Jika buffer output terlalu kecil untuk menyimpan data yang tidak dikompresi, kesalahan dapat ERROR_INSUFFICIENT_BUFFER.

Persyaratan

   
Klien minimum yang didukung Windows 8 [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2012 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header compressapi.h
Pustaka Cabinet.lib
DLL Cabinet.dll

Lihat juga

Fungsi API Pemadatan