200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > UnRAR.dll解压rar文件

UnRAR.dll解压rar文件

时间:2023-07-25 17:04:08

相关推荐

UnRAR.dll解压rar文件

unRAR是一个开源的解压rar文件的C++第三方库,源码的github地址:/aawc/unrar.git

百度文库的一份基本说明:/view/feec405abe23482fb4da4c31.html

unrar的源码下有生成dll的工程,直接用VS进行编译可以得到dll和lib:

我们需要的就是lib和dll,还有dll.hpp。dll.hpp包含了类和解压函数的声明,把UnRAR.lib和dll.hpp拷贝到新建工程目录下,dll放到生成exe的目录,exe会动态链接dll。

#include<locale.h>#include<string>#include<iostream>#include<windows.h>#include "dll.hpp"#pragma comment(lib,"UnRAR.lib")int main(int argc,char *argv[]){std::cout << argc << std::endl;if (argc != 3){std::cout << "input:a.exe rarFile exDir\n";return 0;}HMODULE rt = LoadLibraryW(L"unrar.dll");if (!rt)return 0;setlocale(LC_ALL, "");RAROpenArchiveDataEx test;test.ArcName = argv[1];test.ArcNameW = NULL; //没有使用必须置NULLtest.OpenMode = RAR_OM_EXTRACT;test.Callback = NULL; //没有回调函数必须置NULLHANDLE hd = RAROpenArchiveEx(&test);if (!hd){std::cout << "error";return 0;}RARHeaderDataEx data;int r = 0;while (0 == r){r = RARReadHeaderEx(hd, &data); //必须读才能解压if (r)break;wprintf(L"%ws\n", data.FileNameW);r = RARProcessFile(hd, RAR_EXTRACT, argv[2], NULL);if (r)break;}system("pause");return 0;}

RAROpenArchiveDataEx这个结构没有使用的指针必须置NULL,查看该结构的声明会发现初始化的没有构造函数,所以初始化时需要置NULL,调用的解压函数再内部会自动完成多字节和宽字符的转换,非常方便。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。