温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

VS2015编译7z.dll

发布时间:2020-03-19 18:59:10 来源:网络 阅读:4615 作者:Chinayu2014 栏目:编程语言

(1)到官网下载源码,http://www.7-zip.org/download.html,下载如下:

VS2015编译7z.dll

这个源码包,并解压


(2)打开cmd命名行,粘贴如下:

"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vsvars32.bat"(带双引号)

即建立VS2015的编译环境


(3)解除Build.mak的只读性,修改源码\CPP\Build.mak"33行中的"-OPT:NOWIN98"

去掉"-OPT:NOWIN98",保存


(4)在命令行中CD到CPP\7zip所在目录,执行nmake编译Build.mak,如下:

nmake NEW_COMPILER=1 MY_STATIC_LINK=1


几分钟后编译完成,到相应的文件夹找到编译后的文件.Format7zF工程生成的文件,

在CPP\7zip\Bundles\Format7zF\O文件夹中即7z.dll

--------------------------------------------------------------------------------------

要生成静态库,请进入..\C\Util\7z目录,将工程属性改为lib类型.出现错误时,请修改如下设置:

1.项目”—>“属性”—>“C/C++” “常规”—>“调试信息格式”—>选择“程序数据库(/Zi)”或“无”

或者

2 .项目”—>“属性”—>“C/C++”“代码生成”—>“启用函数集链接”—>选择“是 (/Gy)”


(5)编译好了7z.dll如何调用呢?它的源码相当复杂,在网上找了一个封装类7zip-CPP,下载链接为:

# Fork of SevenZip++ for VS2015, VS2017 (https://github.com/getnamo/7zip-cpp)

是一个静态库工程,会生成7zpp_ud.lib,请放到您的测试工程目录中。

7zip-cpp-master\7zpp是这个静态库的工程。工程目录中有个7z文夹为空,请在7z官网下载lzma源码包[LZMA SDK](http://www.7-zip.org/sdk.html),将LZMA的C和CPP两个文夹复制过来到7z文件夹下。

否则不会生成静态库7zpp_ud.lib

(6)建一个窗口工程,来测试。先包含头文件,如下:

#include <7zpp.h>

窗口类中声明成员:

CScale3DCProgress progressProc;//回调类,继承于SevenZip::ProgressCallback

.cpp中测试代码如下:

SevenZip::SevenZipLibrary lib;//声明库加载类

//在窗口构造函数中,添加代码:
BOOL ret = lib.Load(_T("7z.dll"));

void Ctest7zDlg::OnBnClickedButton1()
{//创建压缩类
SevenZip::SevenZipCompressor compressor(lib, _T("abc"));
compressor.SetCompressionFormat(SevenZip::CompressionFormat::SevenZip);
compressor.UseAbsolutePaths(false);
compressor.AddFile(_T("c:\\1.exe") );//添加文件
compressor.AddDirectory(_T("C:\\util"));//添加文件夹 	
compressor.DoCompress(&progressProc);
}

还有一点,将7zip-cpp中的7zip-cpp-master\Include\7zpp文件夹复中到测试工程中,并添加相应个路径。(窗口头文件中包含的7zpp.h就来自这个文件夹)

(7)回调类的代码如下:

#include "ProgressCallback.h"
#include "SevenString.h"
using namespace SevenZip;
class CScale3DCProgress :public SevenZip::ProgressCallback
{
public:
	CScale3DCProgress();
	~CScale3DCProgress();
        //压缩前调用
	void OnStartWithTotal(const TString& archivePath, unsigned __int64 totalBytes);
	//压缩时,更新完成字节数
	void OnProgress(const TString& archivePath, unsigned __int64 bytesCompleted);
	//当进度到达100%时调用
	void OnDone(const TString& archivePath);
	//调个文件到达100%时调用
	void OnFileDone(const TString& archivePath, const TString& filePath, unsigned __int64 bytesCompleted);
	//是否中断操作,返回true表示中断操作
	bool OnCheckBreak();
};

这是压缩时的回调类,还有解压的回调类,查看压缩包的文件列表回调类,请参看原文档。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI