unrar.dll使用说明

  unrar - unrar.dll - DLL文件信息
  DLL 文件: unrar 或者 unrar.dll
  DLL 名称: UnRAR dynamic library for Windows software developers
  描述:
  unrar.dll是RAR压缩包解压相关文件。
  属于: 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
  输出压缩方式
  FileAttr
  输出文件属性
  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” 均可锁定一个压缩文件。
posted @ 2010-02-20 11:51  Owen Wilson  阅读(5575)  评论(0编辑  收藏  举报