unrar.dll

unrar.dll是RAR壓縮檔解壓相關檔案。

基本介紹

  • 軟體名稱:unrar.dll
  • 軟體平台:UnRAR dynamic library for Windows software developers
  • 軟體語言C語言
  • 軟體授權:Microsoft
unrar - unrar.dll - DLL檔案信息
DLL 檔案: unrar 或者 unrar.dll
DLL 名稱: UnRAR dynamic library for Windows software developers
屬於: UnRAR
系統 DLL檔案: 否
常見錯誤: File Not Found, Missing File, Exception Errors
安全等級 (0-5): 0
UnRAR.dll 說明
~~~~~~~~~~~~~~~~ UnRAR.dll 是一個32位windows的動態程式庫,它可以用來解壓縮RAR壓縮檔
導出函式
====================================================================
HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData)
====================================================================
作用
~~~~
打開Rar檔案並為使用的結構體分配空間
參數
~~~~
ArchiveData 指向 RAROpenArchiveData 這個結構體
struct RAROpenArchiveData
{
char *ArcName;
UINT OpenMode;
UINT OpenResult;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};
結構體中各項含義
ArcName
壓縮檔名稱,以'\0'作為結尾的字元串
OpenMode
輸入參數
可能值
RAR_OM_LIST 只為讀取檔案頭而打開壓縮檔
RAR_OM_EXTRACT 為檢測或者解壓縮而打開壓縮檔
輸出結果
輸出參數
取值範圍
0 成功
ERAR_NO_MEMORY 記憶體不足,無法初始化數據結構的
ERAR_BAD_DATA 壓縮檔頭損壞
ERAR_BAD_ARCHIVE 不是有效的Rar壓縮檔
ERAR_UNKNOWN_FORMAT 無法識別的壓縮方式
ERAR_EOPEN 打開壓縮檔錯誤
CmtBuf
輸入參數,指向一個用來存放注釋的緩衝區。最大的注釋長度為64KB。
注釋是以0結尾的字元串。如果注釋文本的長度超過緩衝區大小,注釋
文本將被截斷。如果 CmtBuf 為 null,將不會讀取注釋。
CmtBufSize
輸入參數。給出注釋緩衝區的大小。
CmtSize
輸出參數,給出讀取到緩衝區的實際注釋大小,不能超過CmtBufSize。
CmtState
輸出參數
可能值
0 注釋不存在
1 注釋讀取完畢
ERAR_NO_MEMORY 記憶體不足,無法釋放注釋
ERAR_BAD_DATA 注釋損壞
ERAR_UNKNOWN_FORMAT 注釋格式無效
ERAR_SMALL_BUF 緩衝區過小,無法讀取全部注釋
返回值
~~~~~~
返回壓縮檔檔案的 handle ,出錯時返回 null
========================================================================
HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData)
========================================================================
說明
~~~~
同RAROpenArchive,類似,但是RAROpenArchiveDataEx允許指定 unicde的檔案名稱,並可以返回檔案標誌
參數
~~~~
ArchiveData 指向 RAROpenArchiveData 這個結構體
struct RAROpenArchiveDataEx
{
char *ArcName;
wchar_t *ArcNameW;
unsigned int OpenMode;
unsigned int OpenResult;
char *CmtBuf;
unsigned int CmtBufSize;
unsigned int CmtSize;
unsigned int CmtState;
unsigned int Flags;
unsigned int Reserved[32];
};
Structure fields:
ArcNameW
壓縮檔名稱,以'\0'作為結尾的Unicode編碼的字元串或者是Null
標誌
輸出參數。由以下位表示構成
Possible values
可能值
0x0001 - Volume attribute (archive volume) 卷屬性 ()
0x0002 - Archive comment present 壓縮檔有注視
0x0004 - Archive lock attribute 壓縮檔鎖定
0x0008 - Solid attribute (solid archive) 固實壓縮檔
0x0010 - New volume naming scheme ('volname.partN.rar') 新的卷名稱('volname.partN.rar')
0x0020 - Authenticity information present 存在用戶身份校驗信息
0x0040 - Recovery record present 存在恢復記錄
0x0080 - Block headers are encrypted 塊頭已經加密
0x0100 - First volume (set only by RAR 3.0 and later) 第一個卷
Reserved[32]
Reserved for future use. Must be zero.
Information on other structure fields and function return values
is available above, in RAROpenArchive function 說明.
====================================================================
int PASCAL RARCloseArchive(HANDLE hArcData)
====================================================================
說明
~~~~
關閉打開的壓縮檔並釋放分配的記憶體。只有當處理壓縮檔案的過程結束後才可以調用這個
過程,如果處理壓縮檔案的過程只是停止,使用這個過程將會引起錯誤
參數
~~~~
hArcData
這個參數存放從RAROpenArchive 函式獲得的壓縮檔檔案的句柄
返回值
~~~~~~
0 成功
ERAR_ECLOSE 關閉壓縮檔案時發生錯誤
====================================================================
int PASCAL RARReadHeader(HANDLE hArcData,
struct RARHeaderData *HeaderData)
====================================================================
說明
~~~~
讀取壓縮檔的頭部。
參數
~~~~
hArcData
這個參數存放從RAROpenArchive 函式獲得的壓縮檔的句柄。
HeaderData
指向RARHeaderData 結構
struct RARHeaderData
{
char ArcName[260];
char FileName[260];
UINT Flags;
UINT PackSize;
UINT UnpSize;
UINT HostOS;
UINT FileCRC;
UINT FileTime;
UINT UnpVer;
UINT Method;
UINT FileAttr;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};
結構體各個域:
ArcName
輸出壓縮檔案名稱,以0結束的字元串。 也可以是當前卷名稱。
FileName
輸出以0結束的字元串的檔案名稱,以OEM (DOS)編碼方式給出。
Flags
輸出檔案標誌
0x01 - file continued from previous volume 前述卷的繼續
0x02 - file continued on next volume 下一個卷還有該檔案的部分
0x04 - file encrypted with password 檔案已加密
0x08 - file comment present 檔案存在注釋
0x10 - compression of previous files is used (solid flag) 此檔案壓縮同前面的檔案有關(固實標誌)
bits 7 6 5
0 0 0 - 目錄大小為 64 Kb
0 0 1 - 目錄大小為 128 Kb
0 1 0 - 目錄大小為 256 Kb
0 1 1 - 目錄大小為 512 Kb
1 0 0 - 目錄大小為 1024 Kb
1 0 1 - 目錄大小為 2048 KB
1 1 0 - 目錄大小為 4096 KB
1 1 1 - 檔案就是目錄
其餘位元組保留
PackSize
輸出壓縮檔案的分包大小或者檔案切割大小
UnpSize
輸出解壓縮後檔案的大小
HostOS
輸出壓縮檔案的宿主作業系統
0 - MS DOS;
1 - OS/2.
2 - Win32
3 - Unix
FileCRC
輸出壓縮之前檔案的CRC值。如果檔案被分割到不同的卷中,將不會在卷中給出。(後面這段話意思好像是說,如果你將一個檔案壓縮到多個包中,每個分卷包不會存放部分檔案的CRC。我試驗切割一個檔案到幾個卷,然後將其中的幾個卷拷貝到其他目錄再使用WinRar打開,發現其中CRC值不同。)
FileTime
輸出參數 按照MS DOS格式輸出的日期和時間
UnpVer
輸出解壓需要的Rar版本。按照10 * Major version + minor version格式給出
Method
輸出壓縮方式
輸出檔案屬性
CmtBuf
檔案注釋,目前在這個版本的Dll還沒有實現,CmtState 始終為0
/*
* Input parameter which should point to the buffer for file
* comments. Maximum comment size is limited to 64Kb. Comment text is
* a zero terminated string in OEM encoding. If the comment text is
* larger than the buffer size, the comment text will be truncated.
* If CmtBuf is set to NULL, comments will not be read.
*/
CmtBufSize
Input parameter which should contain size of buffer for archive
comments.
CmtSize
Output parameter containing size of comments actually read into the
buffer, should not exceed CmtBufSize.
CmtState
Output parameter.
Possible values
0 Absent comments
1 Comments read completely
ERAR_NO_MEMORY Not enough memory to extract comments
ERAR_BAD_DATA Broken comment
ERAR_UNKNOWN_FORMAT Unknown comment format
ERAR_SMALL_BUF Buffer too small, comments not completely read
Return values
~~~~~~~~~~~~~
0 Success
ERAR_END_ARCHIVE End of archive
ERAR_BAD_DATA File header broken
====================================================================
int PASCAL RARReadHeaderEx(HANDLE hArcData,
struct RARHeaderDataEx *HeaderData)
====================================================================
說明
~~~~
同 RARReadHeader 類似,不同之處在於使用 RARHeaderDataEx 結構體,其中包括 Unicode檔案名稱和64位長的檔案大小。
struct RARHeaderDataEx
{
char ArcName[1024];
wchar_t ArcNameW[1024];
char FileName[1024];
wchar_t FileNameW[1024];
unsigned int Flags;
unsigned int PackSize;
unsigned int PackSizeHigh;
unsigned int UnpSize;
unsigned int UnpSizeHigh;
unsigned int HostOS;
unsigned int FileCRC;
unsigned int FileTime;
unsigned int UnpVer;
unsigned int Method;
unsigned int FileAttr;
char *CmtBuf;
unsigned int CmtBufSize;
unsigned int CmtSize;
unsigned int CmtState;
unsigned int Reserved[1024];
};
====================================================================
int PASCAL RARProcessFile(HANDLE hArcData,
int Operation,
char *DestPath,
char *DestName)
====================================================================
說明 描述
~~~~~~~~~~~
執行動作,然後指向下一個檔案。根據 RAR_OM_EXTRACT 確定釋放還是測試
當前檔案。如果設定了 RAR_OM_LIST 給出模式,那么調用這個函式將會忽略當前檔案直接指向下一個檔案。
參數
~~~~
hArcData
這個參數存放從RAROpenArchive 函式獲得的壓縮檔的句柄。
Operation
檔案操作
RAR_SKIP 指向壓縮檔中的下一個檔案。如果壓縮檔是固定, 並且RAR_OM_EXTRACT 已經設定,那么會處理當前
檔案---操作比簡單的查找要慢。
RAR_TEST 檢測當前檔案,然後移動到壓縮檔中的下一個檔案
。如果 RAR_OM_LIST 已經設定了打開模式,
那么操作同RAR_SKIP一樣。
RAR_EXTRACT 解壓當前檔案,然後指向下一個檔案,如果
RAR_OM_LIST 已經設定了打開模式,那么操作同RAR_SKIP一樣。
DestPath
輸入解壓檔案的目錄,這是一個以0結尾的字元串。如果 DestPath
為null,表示解壓到當前目錄下。只有DestName 為null時,這個參數
才有意義。
DestName
這個參數指向一個包含完整路徑和名稱的以0結尾的字元串,默認
為null.如果 DestName 有定義(也就是不是 Null)將會用它來替換壓縮檔中的原始
檔案名稱和路徑。
DestPath 和 DestName都必須按照 OEM 方式編碼。如果必要,可以使用CharToOem 將 文本將參數轉化為OEM方式供給這個函式調用
返回值
~~~~~~
0 成功
ERAR_BAD_DATA 檔案CRC錯誤
ERAR_BAD_ARCHIVE 卷不是有效的Rar檔案
ERAR_UNKNOWN_FORMAT 未知的格式
ERAR_EOPEN 卷打開錯誤
ERAR_ECREATE 檔案建立錯誤
ERAR_ECLOSE 檔案關閉錯誤
ERAR_EREAD 讀取錯誤
ERAR_EWRITE 寫入錯誤
注意:如果你希望放棄解當前的解壓縮操作,請在處理 UCM_PROCESSDATA
回調函式,返回-1。
====================================================================
int PASCAL RARProcessFileW(HANDLE hArcData,
int Operation,
wchar_t *DestPath,
wchar_t *DestName)
====================================================================
說明
~~~~
Unicode版本的 RARProcessFile 。它使用 Unicode 編碼的 DestPath
和 DestName 參數,其餘的參數和返回值都同RARProcessFile中的一樣。
====================================================================
void PASCAL RARSetCallback(HANDLE hArcData,
int PASCAL (*CallbackProc)(UINT msg,LONG UserData,LONG P1,LONG P2),
LONG UserData);
====================================================================
說明
~~~~
這是一個用戶定義的回調函式用來處理unrar事件
參數
~~~~
hArcData
這個參數存放從RAROpenArchive 函式獲得的壓縮檔檔案的句柄
CallbackProc
指向一個用戶定義的回調函式
函式傳送4個參數
msg 事件類型,下面會詳述
UserData 用戶定義傳送給 RARSetCallback 的值
P1 and P2 事件相關參數下面會詳述
可能的事件
UCM_CHANGEVOLUME 處理卷改變
P1 指向下一個卷的名稱,字元串以0結尾
P2 函式調用模式
RAR_VOL_ASK Required volume is absent. The function should
prompt user and return a positive value
to retry or return -1 value to terminate
operation. The function may also specify a new
volume name, placing it to the address specified
by P1 parameter.
RAR_VOL_NOTIFY 成功打開需求的卷。這是一個通知訊息,
不允許改變卷名稱。函式返回一個正數將
繼續,或者-1將停止操作。
UCM_PROCESSDATA 處理解壓數據。用來在不解壓額外的檔案的
情況下直接讀取壓縮檔中的一個檔案。返回正數繼續,或者返回-1放棄操作
P1 指向解壓縮數據的地址。函式可以讀取這些
數據,但是不可以改變它。
P2 解壓縮數據的大小。需要注意,目錄大小不能
超過支持的最大目錄的大小(Rar 3.0中,最大為4MB)
UCM_NEEDPASSWORD DLL needs a password to process archive.
This message must be processed if you wish
to be able to handle archives with encrypted
file names.
DLL需要密碼繼續操作。當年你需要處理內部檔案名稱也加密了的壓縮檔時必須處理。 It can be also used as replacementof RARSetPassword function even for usualencrypted files with non-encrypted names.
P1 指向密碼緩衝的地址。你需要將密碼放在這裡
P2 密碼緩衝的大小
UserData
用戶傳送給回調函式的參數
其餘的UnRAR.dll中的函式不應該從回調函式中調用
返回值
~~~~~~
====================================================================
void PASCAL RARSetChangeVolProc(HANDLE hArcData,
int PASCAL (*ChangeVolProc)(char *ArcName,int Mode));
====================================================================
絕對函式,使用 RARSetCallback 替換
====================================================================
void PASCAL RARSetProcessDataProc(HANDLE hArcData,
int PASCAL (*ProcessDataProc)(unsigned char *Addr,int Size))
====================================================================
絕對函式,使用 RARSetCallback 替換
====================================================================
void PASCAL RARSetPassword(HANDLE hArcData,
char *Password);
====================================================================
說明
~~~~
給未加密的壓縮檔上設定一個密碼
參數
~~~~
hArcData
這個參數存放從RAROpenArchive 函式獲得的壓縮檔檔案的句柄
Password
指向以0為結尾的密碼字元串
返回值
~~~~~~
====================================================================
void PASCAL RARGetDllVersion();
====================================================================
說明
~~~~
返回 API 版本
參數
~~~~
返回值
~~~~~~
返回當前UnRar.DLL中API的版本,在 unrar.h 中由 RAR_DLL_VERSION 定義。只有當 UnRar.DLL中的API升級時,才會提高版本號。不要將這個版本同UnRar.Dll的編譯版本弄混,編譯版本在每一次編譯的時候都會變化。
如果 RARGetDllVersion() 返回值低於你軟體需要的版本,就表示你使用的DLL版本太低。
在老的Unrar.dll中沒有提供這個功能,所以最好在使用時要先用LoadLibrary 和 GetProcAddress 檢查一下是否有這個功能。
注釋: 來自WinRar中文版的幫助檔案
固實壓縮檔案是 RAR 的一種特殊壓縮方式存儲的壓縮檔案,它把壓縮檔案中的全部檔案都當成一個連續數據流來看待。固實壓縮檔案只支持 RAR 格式的壓縮檔案,ZIP 壓縮檔案永遠是非固實的。RAR 的壓縮檔案可由用戶決定選擇固實或非固實的壓縮方式。
固實壓縮可增加壓縮性能,特別是在添加大量的小檔案的時候,但它也有一些重要的不利因素:
對已存在的固實壓縮檔案更新時較慢;
要從固實的壓縮檔案解壓單個檔案時,它之前的檔案都需先經過分析。這造成當從固實的壓縮檔案內取出檔案時會比一般壓縮檔案取出檔案慢一些。但是,當從固實的壓縮檔案解壓全部的檔案時,解壓速度並沒有影響。
如果在固實壓縮檔案中的任何檔案損壞了,要從損壞的範圍中解壓全部的檔案是不可能的。因此,如果固實壓縮檔案是保存在例如軟碟等媒介時,推薦你在製作時使用 恢復記錄。
固實壓縮方式適用場合為:
壓縮檔案很少更新的時候;
不需要經常從壓縮檔案中解壓一個檔案或是部分檔案的時候;
壓縮效率比壓縮速度更為重要的時候。
通常檔案在固實壓縮時是以擴展名做排序的,但也可以使用特殊檔案來設定替代的檔案順序。檔案名稱是 rarfiles.lst。
鎖定壓縮檔案
RAR 壓縮檔案格式 支持壓縮檔案的鎖定。鎖定的壓縮檔案是不能用 WinRAR 來修改的。 你可以鎖定重要的壓縮檔案以防止它們被意外的更改。
在 WinRAR 圖形界面模式使用“鎖定壓縮檔案”命令或者在命令行中使用 命令“K” 均可鎖定一個壓縮檔案。

相關詞條

熱門詞條

聯絡我們