无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 19713|回复: 18
打印 上一主题 下一主题

[已解决] 请教,如何调用 7zxa.dll 解压7z文件 ?

  [复制链接]
跳转到指定楼层
1#
发表于 2014-7-7 15:44:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 阿弥陀佛 于 2014-10-19 15:14 编辑


这个问题比较麻烦,已经找到代替的方案,使用7-zip32.dll会更简单。
=================================================

如题,哪位大侠知道 7zxa.dll 如何调用的?烦请告知,感激不尽!
注意不是7z.dll。
7zxa.dll只有170k,只能用来解压7z压缩格式。winrar就是调用它来解压7z的。
附上7zxa.dll 7zxa.zip (83.79 KB, 下载次数: 236)

点评

搞到一个25K,可以解压7Z的程序!  发表于 2015-10-19 16:29
推荐
发表于 2014-7-8 08:08:53 | 只看该作者
解压一个文件并不是只需要一两个调用就可以实现的.涉及到内存分配,数据处理等.

要解压7z格式,首先需要了解7z的格式,然后才能通过SDK来针对性处理..

需要的资料在这里都可以找到,懂得编程的应该可以找到方法.

http://www.7-zip.org/sdk.htm

我对解压这一块也不熟,帮不上忙,你可以自己研究一下.这里也有一个VB调用的例子

https://github.com/wqweto/VszLibl

若你是想要编程使用就可以用7zxa的DLL,否则建议直接使用7z.exe(不包含DLL)或7za.exe(包含了DLL).会比较方便.

点评

一般都是接口调用,或者命令行的调用!!!  详情 回复 发表于 2015-10-19 10:49
多谢指教!我就是一直找不到相关资料。我自己好好看看。  发表于 2014-7-8 12:31
回复

使用道具 举报

推荐
 楼主| 发表于 2014-7-7 22:21:13 | 只看该作者
本帖最后由 阿弥陀佛 于 2014-7-7 22:23 编辑
2010laocfan 发表于 2014-7-7 21:57
7-Zip 附加包 9.22 包含
7za.dll      - 7z 档案运行库。
7zxa.dll     - 7z 档案释放运行库。


谢谢回复!不过这些我知道。7zxa不是早期的7z.dll改名的。新版的9.20也有这个dll。它只能用来解压7z格式文件。我只需要用这功能。而且它体积很小,dll方便被其它程序调用。就是不知道该怎么调用它。网上也找不到资料。
回复

使用道具 举报

推荐
发表于 2014-7-7 21:57:57 | 只看该作者
本帖最后由 2010laocfan 于 2014-7-7 22:04 编辑

7-Zip 附加包 9.22 包含
7za.dll      - 7z 档案运行库。
7zxa.dll     - 7z 档案释放运行库。
7zS.sfx         - 安装包 SFX 模块。
7zSD.sfx        - 安装包 SFX 模块(需调用 msvcrt.dll)
7zS2.sfx        - 精简版 SFX 模块(GUI 版本,需调用 msvcrt.dll)
7zS2con.sfx     - 精简版 SFX 模块(命令行版本,需调用 msvcrt.dll)
7zr.exe      - 独立的 7-Zip 命令行版本
7zr.exe      - 低版本的 7za.exe 命令行
7-zip.chm    - 帮助文件
License.txt  - 版权许可信息
readme.txt   - 自述文档(当前文件)
history.txt  - 7-Zip 历史
Far\            - FAR 管理器插件
Installer\      - 制作安装包所需文件
x64\            - x64 DLL 文件

zh-cn.txt    - 最新版本语言文件(Nightly Build)
7z.sfx          - 自释放模块(GUI 版本)
7zCon.sfx       - 自释放模块(命令行版本)
Docs\           - 7-Zip 自述、历史更新、帮助文件


7za.dll 特征:
  - 支持 7z 格式
  - 内置编码器:LZMA、LZMA2、PPMD、BCJ、BCJ2、COPY、AES-256 加密。
  - 内置解码器:LZMA、LZMA2、PPMD、BCJ、BCJ2、COPY、AES-256 加密、BZip2、Deflate。
7zxa.dll 则只支持解压缩 .7z 格式。

由此推断7zxa.dll可能由早期的7z.dll改名而来,只是一个库配合exe才能运行,命令行运行7z /?
换言之,完整功能两个都要;只解压缩 .7z 只要7zxa.dll

点评

谢谢回复!不过这些我知道。我只需要用它来解压7z文件。因为它体积很小。而且dll方便被其它程序调用。就是不知道该怎么调用它。网上也找不到资料。  详情 回复 发表于 2014-7-7 22:21
回复

使用道具 举报

推荐
发表于 2014-7-29 21:07:04 | 只看该作者
7zxa.dll是一个库文件,需要和相关文件配合使用!它本身无法完成数据解压!
以上是我个人的了解与解析文件得到的结果仅供参考,不保证正确!

可以尝试 7z.dll与7z.exe配合使用,且不同位宽系统要用不同版本!

点评

www.biquge.co/book/1/1238/ 大圣传  发表于 2014-7-30 08:01
7zxa.dll我也没查到资料,看函数也没看出有调用接口。所以就不知道了! X64版7Z.exe与7z.dll打包成exe后也不到530KB! 总之系统环境好复杂,我曾经测试在自己电脑上一个7z.dll就可以完成解压和打包,但是放别人电  详情 回复 发表于 2014-7-29 21:16
谢谢。我只需要解压7z格式,用7zxa.dll是可以做到的,不过我编程水平有限,没资料也没过多的精力去研究,所以使用7zr.exe了。用7z.dll与7z.exe配合使用可以解压大部分压缩格式,不过体积太大,两个文件也不方便。  发表于 2014-7-29 21:12
回复

使用道具 举报

6#
发表于 2014-7-29 21:16:38 | 只看该作者
bbs.beikeit.com 发表于 2014-7-29 21:07
7zxa.dll是一个库文件,需要和相关文件配合使用!它本身无法完成数据解压!
以上是我个人的了解与解析文件 ...

7zxa.dll我也没查到资料,看函数也没看出有调用接口。所以就不知道了!
X64版7Z.exe与7z.dll打包成exe后也不到530KB!
总之系统环境好复杂,我曾经测试在自己电脑上一个7z.dll就可以完成解压和打包,但是放别人电脑就不行,后来7Z.exe和7z.dll一起了就没再出问题。
回复

使用道具 举报

7#
发表于 2014-7-29 22:07:41 | 只看该作者
受教了,好像没几个觉得7zip大了。楼主研究出来露个头,我们好学习下。
回复

使用道具 举报

8#
发表于 2014-7-30 09:47:27 | 只看该作者
本帖最后由 2011mking 于 2014-7-30 09:50 编辑

网上找的这个单元调用7z.dll可以实现压缩与解压。
sevenzip.rar (9.98 KB, 下载次数: 111)
调用时uses sevenzip;
uses sevenzip;

function ProgressCallback(Sender: Pointer; total: boolean; value: int64)
  : HRESULT; stdcall;
begin
  if total then
    FormMain.ProgressBar.Max := value
  else
    FormMain.ProgressBar.Position := value;
  Result := S_OK;
end;

procedure TFormMain.btnAddFilesClick(Sender: TObject);
var
  Counter: Integer;
begin
  if OpenDialog.Execute then
  begin
    for Counter := 0 to OpenDialog.Files.Count - 1 do
    begin
      memoOutput.Lines.Append(OpenDialog.Files[Counter]);
    end;
  end;
end;

procedure TFormMain.btnCompressClick(Sender: TObject);
var
  Arch: I7zOutArchive;
  Counter: Integer;
begin
  if OpenDialog.Files.Count = 0 then
  begin
    ShowMessage('请添加文件');
    Exit;
  end;
  memoOutput.Lines.Append('开始压缩');
  Arch := CreateOutArchive(CLSID_CFormat7z);
  Arch.SetProgressCallback(nil, ProgressCallback);
  for Counter := 0 to OpenDialog.Files.Count - 1 do
    Arch.AddFile(OpenDialog.Files[Counter],
      ExtractFileName(OpenDialog.Files[Counter]));
  SetCompressionLevel(Arch, 5);

  //SevenZipSetCompressionMethod(Arch, T7zCompressionMethod.m7Deflate64);
  SevenZipSetCompressionMethod(Arch, m7Deflate64);

  Arch.SaveToFile('.\test.7z');
  memoOutput.Lines.Append('完成压缩');
  Arch := nil;
end;

procedure TFormMain.btnExtractClick(Sender: TObject);
var
  Arch: I7zInArchive;
  Counter: Integer;
begin
  if not FileExists('.\test.7z') then
  begin
    ShowMessage('请先成生压缩文件');
    Exit;
  end;
  memoOutput.Lines.Append('开始解压缩');
  Arch := CreateInArchive(CLSID_CFormat7z);
  Arch.SetProgressCallback(nil, ProgressCallback);
  Arch.OpenFile('.\test.7z');
  for Counter := 0 to Arch.NumberOfItems - 1 do
  begin
    if not Arch.ItemIsFolder[Counter] then
      memoOutput.Lines.Append('包含文件:' + Arch.ItemPath[Counter]);
  end;
  if ForceDirectories('.\Extract') then
  begin
    Arch.ExtractTo('.\Extract');
    memoOutput.Lines.Append('完成解压缩');
    Arch := nil;
  end
  else
    ShowMessage('无法解压到指定目录');
end;

只能解压、压缩,无法打包成自解压。

配合这个版本的7z.dll 没问题,其它的没测过 7zdll.rar (273.38 KB, 下载次数: 100)

点评

高人啊. 自解压那个不用想了, 需要sfx文件作为exe的文件头配合. 其实7z和rar的自解压都是类似"copy exe.sfx + 配置文件.txt+压缩包.7z/.rar xxxx.exe"做出来的, 只不过rar可以在生成自解压程序时修改sfx文件的资源,  详情 回复 发表于 2014-7-30 13:52
多谢各位指点!  发表于 2014-7-30 09:58
回复

使用道具 举报

9#
发表于 2014-7-30 13:52:38 | 只看该作者
2011mking 发表于 2014-7-30 09:47
网上找的这个单元调用7z.dll可以实现压缩与解压。

调用时uses sevenzip;

高人啊. 自解压那个不用想了, 需要sfx文件作为exe的文件头配合. 其实7z和rar的自解压都是类似"copy exe.sfx + 配置文件.txt+压缩包.7z/.rar xxxx.exe"做出来的, 只不过rar可以在生成自解压程序时修改sfx文件的资源, 比7-zip shell做的更细致
回复

使用道具 举报

10#
发表于 2014-11-1 22:09:46 | 只看该作者
不知道能不能用,明天试一下
回复

使用道具 举报

11#
发表于 2014-11-3 16:44:04 | 只看该作者
P 大的 0PE 右键菜单中有 7za 压缩与解压缩,他用的好像是 190KB 大小的 7za.exe。

应该不是佛大所指。
回复

使用道具 举报

12#
发表于 2015-10-18 17:55:42 | 只看该作者
7Z自解压文件比非自解压就大了50KB。我觉得这个头部文件就是最小的解压7Z的程序,但是需要高手们该一下才能用
回复

使用道具 举报

13#
发表于 2015-10-19 10:49:22 | 只看该作者
chenall 发表于 2014-7-8 08:08
解压一个文件并不是只需要一两个调用就可以实现的.涉及到内存分配,数据处理等.

要解压7z格式,首先需要了 ...

一般都是接口调用,或者命令行的调用!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-7 11:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表