複製鏈接
請複製以下鏈接發送給好友

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” 均可鎖定一個壓縮文件。