首先去7z官网下载代码 7z的源代码或者lzma都可以,但是推荐下7z的源代码,里面东西比较全

7z.dll 通过 COM 接口工作。但是它并没有使用标准的 COM 接口 。如果有com基础的话 看他的代码会比较容易。

比较简单的例子是 /cpp/7zip/ui/client7z 里面有简单的 压缩 解压缩 和查看压缩包文件。 7z.dll的源代码在 bundles/7zformatf 里面

其中 clinet7z和 file manager的代码看起来比较好理解,可以自己一步一步跟着走。 // 晚上再更新

7z.dll 采用com接口工作,但是它并没有使用标准的COM接口。

对文件的解压主要靠下面两个回调类

/ Archive Open callback class

// 压缩文件打开回调类  class CArchiveOpenCallback:

public IArchiveOpenCallback,

public ICryptoGetTextPassword,

public CMyUnknownImp

// 解压回调类  class CArchiveExtractCallback:

public IArchiveExtractCallback,

public ICryptoGetTextPassword,

public CMyUnknownImp

解压回调类中

// IProgress

STDMETHOD(SetTotal)(UInt64 size); //获得加压文件总字节数

STDMETHOD(SetCompleted)(const UInt64 *completeValue); //获取当前解压文件大小字节数 可以再这个回调函数中自己计算当前的解压进度。

//IArchiveExtractCallback

STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream,Int32 askExtractMode); //获取文件流,

LRESULT MyReleaseSteam(); //当取消解压时,释放文件流控制权原因取消解压后没有走到SetOperationResult()回调函数,而释放文件流就在这个函数中,所以要自己释放。

//获取接口函数

CreateObjectFunc createObjectFunc = (CreateObjectFunc)lib.GetProc("CreateObject");

CMyComPtr<IInArchive> archive;

errorcode =  createObjectFunc(&CLSID_CFormat7z, &IID_IInArchive, (void **)&archive);

CInFileStream *fileSpec = new CInFileStream;

CMyComPtr<IInStream> file = fileSpec;

UString archiveName = GetUnicodeString(inFile);

if (!fileSpec->Open(archiveName))

{

//打不开压缩文件,(找不到该文件)

return ;

}

CArchiveOpenCallback *openCallbackSpec = new CArchiveOpenCallback;

CMyComPtr<IArchiveOpenCallback> openCallback(openCallbackSpec);

openCallbackSpec->PasswordIsDefined = false;

errorcode = archive->Open(file, 0, openCallback);

if (errorcode != S_OK)

return;

// Extract command

CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback;

CMyComPtr<IArchiveExtractCallback> extractCallback(extractCallbackSpec);

extractCallbackSpec->Init(archive, OutFile); // second parameter is output folder path

extractCallbackSpec->PasswordIsDefined = false;

extractCallbackSpec->SetFileInfo(info);

// extractCallbackSpec->PasswordIsDefined = true;

// extractCallbackSpec->Password = L"1";

errorcode = archive->Extract(NULL, (UInt32)(Int32)(-1), false, extractCallback);

if (errorcode != S_OK)

return;

使用7z.dll完成简单解压缩相关推荐

  1. 7z 常用压缩与解压缩命令

    本文主要介绍的是使用命令行方式来执行 7z 的 压缩 与 解压缩 所需材料:7z.exe.7z.dll 下载地址:http://www.7-zip.org/ 7z支持格式: 压缩 / 解压缩: 7z, ...

  2. 使用ICSharpCode.SharpZipLib.dll实现在线解压缩

    ICSharpCode.SharpZipLib.dll 是一个基于GNU的免费库文件,他的功能很强大. 下载地址:http://www.icsharpcode.net/OpenSource/Sharp ...

  3. VC编写和调用DLL的简单例子

    用Visual Sudio 6.0新建一个工程,工程的类型选择Win32 Dynamic-Link Library.工程名任意 其他所有选项取默认 新建一个cpp文件,代码如下: int add(in ...

  4. C++ 实时显示7z压缩与解压缩的进度

    一.7zip下载地址 https://www.7-zip.org/sdk.html 二.nmake编译 下载完后,进入文件夹: 使用VS的命令行工具(nmake)进行编译(命令:nmake /f ma ...

  5. C++ 调用7z进行解压缩,并返回解压缩进度和异常信息

    原创文章,转载请注明出处. C++ 7z解压缩 前言 解决方案 1>拿到 bit7z64.lib和7z.dll 1.1>下载编译bit7z64.lib需要的源代码 1.2>解压下载文 ...

  6. kali linux解压文件.gz,kali linux 压缩文件解压缩命令(包含7z)

    tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) --------------- .gz 解压1 ...

  7. powershell:调用7z,haozip解压缩文件

    因为windows内置了zip格式文件的解压缩,所以powershell中可以直接调用powershell的函数就能实现zip解压缩. 利用powershell内置功能实现zip解压缩的代码如下: # ...

  8. Java实现.7z格式文件的压缩(打包)与解压缩

    Java实现文件压缩与解压缩-----.7z 1. 压缩 1.1 实现代码 1.2 maven依赖 2. .7z文件的解压 2.1 源代码 2.2 警告问题解决 Java中实现.7z的压缩与解压缩 J ...

  9. 因计算机丢失msvcp120d.dll,计算机中缺失MSVCP120D.dll和MSVCR120D.dll怎么解决

    2017-02-17 回答 [首先给出99%情况下都能解决这个问题的最简单办法]: 下载并安装微软vc++2013版运行库 (英文全称:microsoft visual c++ 2013 redist ...

最新文章

  1. 设计模式:访问者模式(Visitor Pattern)
  2. 趣链 BitXHub跨链平台 (2)跨链网络拓扑
  3. 大神如何一招完美解决Hadoop集群无法正常关闭的问题!| 博文精选
  4. 【英语学习】【Daily English】U10 Education L01 Is this certificate a must?
  5. zabbix-自定义监控项
  6. 软件设计师学习3——操作系统知识1
  7. 中南大学-大学生心理健康教育-MOOC/雨课堂-图片版答案(期末测试)
  8. 【经验贴】本科生毕业论文答辩经验
  9. Counting Stars HDU - 6184
  10. 韩顺平java学习day1
  11. 共射极单管放大器的Multisim仿真实验
  12. PTA-IP地址转换
  13. Laravel :Laravel、Symfony、 Zend 对比测试
  14. MDCC王戈点爆全场:Smule乐器王是怎样炼成的
  15. webpack——module、chunk和bundle的区别
  16. java中单根_通俗易懂的告诉你什么是java的单根继承结构
  17. 视频处理-按帧或者按秒截取图像
  18. 计算机属于电器还是学习用品,未来的学习用品作文
  19. 做好站外推广之论坛推广的技巧
  20. Linux下安装和配置ARM交叉编译器

热门文章

  1. 易用性测试流程和方法
  2. 持久数据结构 Persistent data structures
  3. 构建GLFW详细全过程
  4. android dialog 详解,详解android dialog自定义实例
  5. [转载]3GP文件格式研究
  6. ldap数据库--ldapsearch,ldapmodify
  7. 计算机组成原理 存储器
  8. 串行进位加法器与超前进位加法器 verilog
  9. 浅谈OC中Block的本质
  10. 如何判断对象已经死亡