火山PC-PIV模块
📢
之前我单独公开了几个库,维护起来甚是麻烦,现在我把自用的模块整理分享出来,以后有什么新功能,基本就在这里更新了。
如果遇到bug和模块冲突,欢迎找我报错,最好带上例子。
💽 安装
下载地址:https://saier.lanzoul.com/b016cwvle
在线更新:火山平台升级工具 by 仰望
安装本模块前,必须将 火山软件开发平台 更新到最新版本,及时安装论坛的更新包才是最新版。
本模块部分功能需要 VS 2017 以上才能编译使用。
现在提供两种形式的安装包:
-
火山模块安装包 [.vcip]
模块本体的安装包。
火山自身的模块安装包格式,双击
.vcip
文件即可打开火山程序进行安装,但压缩率比较低。如果安装失败,请对火山主程序按鼠标右键打开「属性」,勾选「兼容性」选项卡里的「以管理员身份运行此程序」。
-
静态库文件 [.7z]
由于部分静态库文件太大,而且不会经常更新,所以另外用 7z 格式压缩。
请手动解压安装到
火山目录\plugins\vprj_win\classlib\user\piv\
🎯 简介
本模块总共有两个子模块,子模块之间功能不重叠,主要是收录标准有以下差别:
-
PIV基础类
除了视窗基本类,不依赖其他任何模块。
-
PIV扩展类
会依赖部分官方模块,但不会依赖界面库和其他第三方模块。
PIV静态库已经合并到PIV基础类,请自行删除旧源码的相关模块配置
本模块封装遵从以下标准:
-
不重复造轮子
核心库已有的功能,如果没有可明显改进的地方,不会重复封装。
-
开源
所有封装的代码均公开源码。
-
效率优先
以执行效率为优先,基本使用C++和嵌入式语法封装。
-
源码编译
能直接用源码编译的库,就不会编译成 dll 再封装,缺点是会增加编译耗时,如果其他代码出错,可能会一下子蹦出大量报错。
-
面向对象
关联性的功能封装成类,以类实例使用。除了常用命令,尽量减少使用全局类,以「类名.静态方法」调用,减少同名冲突。
-
解耦减少不同类库之间的互相依赖,能以最小的代价把类库抠出来单独使用。随着基础功能的广泛应用,类库之间耦合度增大,已经难以解耦了。
PIV 是什么意思?
我也不知道,作为起名废,这名称是沿用了我注册的一个域名,而当初注册这三个字母域名的时候,拼凑的思路上比较靠近 pic、pixiv。
有人说 PIV 是 VIP 的取反,虽然不是我本意,但这的确很恰当,因为PIV模块会一直免费开源。
关于过时功能
本模块已有一定的历史,一些早期功能已经不合时宜,但为了兼容用户较早前写的源码,我一直有保留
为了让用户尝试新的东西,所以从 2023/07 版开始,我通过火山的条件编译功能屏蔽了一些过时功能
如果你有旧源码不想改的话,请在项目属性的「编译时预定义宏」中添加 PIV_ENABLE_OBSOLETE
📝 更新日志
※我经常修改现有的代码,比如修正bug、优化效率、规范格式、修订备注等……如果功能和用法没有改变,一般不会写在更新日志里,所以每次更新改动的地方其实还是有不少的。
📅 2024/07/01
- 修复「配置文件操作类」;
📅 2024/06/30
- 修复「文件拖放类」;
- 修正已知错误;
- 其他调整与优化;
📅 2024/06/18
- 更新 bit7z 静态库,修正了部分电脑覆盖解压可能会出错的问题;
- 修正已知错误;
📅 2024/06/17
- 初步检查并处理代码与C++20的兼容问题;
- 修正已知错误;
📅 2024/06/15
-
使用本地类别名重写「标准文本类(W/U/A)」与「文本视图类(W/U/A)」;
用法跟以前基本一致,但相关数组类型有改名,以及增删了部分方法,请注意修改代码;
-
「磁盘监视类」增加「被删到回收站」和「文件被移动」事件;
-
其他优化与修正;
📅 2024/05/30
- 修正「进程操作类」的取模块句柄(上一版的bug);
📅 2024/05/27
- 新增「文件操作类EX」和「内存映射文件类EX」;
- 优化「磁盘监视类」,事件增加了文件属性参数,可用于判断更改的是文件还是目录;
- 升级了 7-zip、bit7z 和 MMKV,请更新静态库文件;
- 优化了扩展类的「高并发网络访问类」;
- 模块中的大部分本地类型增加了「取展示内容」方法,用于输出信息;
- 其他多处优化与修正;
📅 2024/04/01
- 新增「磁盘监视类」,通过 NTFS 的 USN 日志来监控文件和目录的更改,实现原理跟 Everything 相同;
- 排序集和哈希集模板增加了集合操作(是否包含、求并集、求交集、求差集、求对称差);
- 「PIV数组模板」增加了「打乱顺序」;
- 完善 ImGui 的常量与结构体成员的中文名称(尚缺备注),增加一个隐藏主窗口的例子;
- 其他优化与修正;
📅 2024/03/06
注意:这一版改动比较大,旧项目的代码可能需要少量修改。
-
使用别名类型重新封装了部分 C/C++ 本地类和本地结构,本地类和本地结构的特征:不继承火山的对象类、没有调试输出信息、不能设置参数默认值(空对象)、不能设置初始值;
注意:由于 ImGui 大部分类型重新封装为本地类,部分参数不再支持可空默认值;
-
由于官方库增加了对应类型,所以「标准文本类」改名为「标准文本类W」、「文本视图类」改名「文本视图类W」;
-
将「发送输入类」升级为「键鼠输入」;
-
Go协程改为默认不 HOOK 系统 API,需要的请手动调用「Go协程.启用HOOK ()」;
-
其他优化与修正;
📅 2024/02/06
-
修正已知问题;
注意:下一版将使用别名类型等新特性,将不再兼容 2024 年之前的火山;
📅 2024/01/18
- 修正「BASS音频支持库」在发布版下会崩溃的问题;
- ImGui 的各种窗口框架中增加「隐藏任务栏图标」属性,以及「取窗口句柄」统一改为返回 Win32 的窗口句柄(HWND);
- 其他优化与修正;
📅 2024/01/07
- 恢复了旧版的「进程操作类」,新版的改名成「NT进程操作类」;
- 将「BASS音频支持库」改为显式链接动态库,支持动态加载 DLL 文件;
- ImGui 源码升级到 1.90.1,完善 ImGui 各窗口框架的主要属性设置,补完了常量名(备注有空再填);
- 7-zip 文件解压缩的库版本升级到 bit7z v4.0.5;
- MMKV键值表 升级到 1.3.2,请下载更新静态库文件;
- 新增「界面时钟类」,跟时钟组件一样,在主窗口的消息循环中执行周期事件;
- 优化「文本到Usc2编码」和「Usc2编码到文本」;
- 其他多处优化调整;
📅 2023/12/11
- 升级了「进程操作类」,部分 API 改用了 Ntdll 版,支持 32 位程序读取 64 位进程的信息和内存;注意:类库中的内存地址和句柄改为长整数,你之前的源码需要小量修改;
- std::Vector 数组容器增加了「升序排序、降序排序」,其中「对象容器模板类」需要在模板实现类的接收事件「小于比较、大于比较」中实现对应的比较函数,才能正确排序;
- 标准文本类和文本视图增加了读写属性「代码页」,可用于处理非本地编码的多字节文本转换;
- ImGui 增加了「IM字形范围构建类」,提供了自定义字形范围的相关方法,具体请看例程;
- 新增「IM颜色类」,提供了 ImGui 中的各种颜色的快捷创建与转换(ImGui 不能直接使用火山颜色类中的常量);
- 新增「内存模块PP」,封装了 MemoryModulePP,这是官方「内存模块库」MemoryModule 的分支;
📅 2023/10/31
- 新增全局方法 _u8 和 _sv,为「创建文本对象U」和「创建文本视图U」的别名;
- 新增全局方法「取全局单例、构造对象、带参构造对象」,前两个相比系统的「取全局对象、新建对象」,返回值即为所提供的对象类型,无需做类型转换;
- 其他优化和修正;
📅 2023/10/12
- 新增「无锁队列模板类、无锁阻塞队列模板类」及其常用类型,为多生产者线程、多消费者线程并发的无锁队列;
- 新增「读写队列模板类、读写阻塞队列模板类、读写循环队列模板类」及其常用类型,为支持单生产者线程、单消费者线程的无锁读写队列;
- 新增「VMP注册机类.导入密钥对文件」;
- 调整分类目录,其他优化和修正;
📅 2023/10/05
- 新增「正则匹配类、正则查找类、正则查找类U」,封装了一个简单的正则表达式,大部分场景下速度比官方现在的两个正则库都要快,具体介绍请看例程;
- 7-zip 文件解压缩的库版本升级到 bit7z v4.0.1;
- 更新了 PIV 的静态库包,删除了多余的静态库文件(VS 2015 之后 ABI 向后兼容,只需要编译一个较早 VS 版本的静态库就可以);
建议更新后执行 piv 目录里的 清理文件.bat,删除旧版的无用文件;
📅 2023/09/29
- 修正存档压缩类和配置文件操作类的部分问题;
📅 2023/09/27
- 修正「存档解压类、存档压缩类、存档编辑类」的进度改变事件在 32 位下出错的问题,「启用进度反馈」改为属性读/写方法;
- 「存档解压类」增加「打开文件资源」,相比文件资源到字节集,可以减少一次内存分配与复制;
- 「存档读写类」增加一系列一键解压视窗文件资源的方法;
- 「MD5校验类、xxHash类」增加了取视窗文件资源哈希值的方法;
- 修正「配置文件操作类」打开 UTF-16LE 文件出错的问题;
📅 2023/09/23
- 修正「存档编辑类」的部分方法无法成功执行的问题;
- 其他优化和修正;
📅 2023/09/22
- 适配火山飞扬#22版09-21更新包新增的单精度小数,注意此版本不再兼容旧版火山,相关例子也有调整;
- 移除子模块「PIV静态库」,将其内容合并到「PIV基础类」,由于静态库体积太大,仍需要在网盘单独下载静态库文件;
- PivJSON 改为按插入顺序输出,并新增 无序PivJSON(等同于旧版的 PivJSON),PivOrderJSON 将继续保留以兼容旧版源码;
- 更新 7-zip 文件解压缩的库版本;
- MMKV 更新到 1.3.1,新版置入键值时支持设置有效期,可以自动删除到期的键值对;
- 更新 {fmt}、xxHash、simpleini、simdutf、OpenCC 等开源项目的版本;
- 修正「线程池对象类」一个容易导致崩溃的 bug;
- 修正标准文本类的多处 BUG,以及其他优化和修正;
📅 2023/09/05
- 其他优化和修正;
📅 2023/08/09
- 新增「ULID类」,即可排序的唯一标识符,相比 UUID/GUID,它可以按字典序排序;
- 修正与 Ex_DirectUI 模块的一处冲突;
📅 2023/07/22
- 新增 libgo 协程库,相关类库:
Go协程:协程的常用操作;
协程调度器:负责管理协程的调度线程;
协程池类、协程池回调处理器:可以在协程池中运行带回调的任务;
协程配置选项:协程的全局配置选项;
协程定时器、协程定时ID:在协程中执行一次性的定时任务;
协程互斥锁类、协程读写锁类、协程唯一互斥锁类、协程条件变量类:用于协程间的互斥通信;
信道模板类:用于协程的安全通信,已经定义了常用的模板实现类; - 新增「异步线程类」、「函数对象类」、「唯一互斥锁类」、「条件变量类」、「未来对象模板类」、「承诺对象模板」,以及后两个模板类的常用模板实现类,完善了线程对象(std::thread)异步获取返回值的功能;
- 通过条件编译屏蔽了模块的过时功能,如果你不想改动旧源码,可以在项目属性的「编译时预定义宏」中添加「PIV_ENABLE_OBSOLETE」,即可继续使用过时功能;
📅 2023/06/29
- 新增「线程对象类」,为 std::thread 的封装,支持任意格式参数和返回值类型的方法,还支持绑定类的非静态方法,线程中调用类的非静态成员不再需要接收事件;
- 新增「线程池对象类」,跟旧版线程池类一样是 IOCP 模型,但线程实现改用了 C++11 标准库,支持任意格式参数和返回值类型,也不限静态和非静态方法;
- 新增「互斥对象类」,为 std::mutex 的封装,主要使用其中的全局方法「互斥自动锁」,即使线程异常结束,也能保证不会出现死锁;
- 新增「线程池对象」和「线程操作」两个例程,简单演示以上新增功能;
- 新增全局方法「取现行纳秒时间戳」;
📅 2023/06/25
- 优化 ImGui:补全 DX12 和 Vulkan 的图片加载;降低窗口不显示时的资源占用;完善例程,特别是完全重写了 WTL/MFC 的例程;
- ImGui 切换到 Docking 分支,支持窗口停靠、窗口合并和分离;
📅 2023/06/23
- 新增 ImGui 支持库(预览版),使用方法请看相关例程(另外下载);
预览版已经封装了 ImGUI 的主要功能,但有部分细节和常量名未写好;
预览版的方法和常量名可能会修改,我尽量在下一版固定下来,有意见请尽快向我提交; - 「程序信息类」新增「取文件版本」和「取产品版本」,获取的版本结构跟「取程序版本」不同,支持火山程序的文件版本(等同项目属性中的版本号),方法的返回值是长整数,更适合用来做版本比较;
- 其他优化和修正;
📅 2023/05/07
- 优化「管道命令行类」,将「收到输出信息」事件的参数改为字节集类,以兼容 ANSI 和 UTF-8 编码;增加方法「终止命令」,用于中断正在执行的命令;增加属性读方法「是否空闲」,用于判断是否正在执行命令;
- 完善 WinHTTP 的代理设置和备注;
- 修正其他 bug;
📅 2023/04/28
- 优化 MD5 和 xxHash 的取文件哈希,将读取缓存增大到 64Kb,加快大文件的哈希速度;
- 修正进程操作相关的一些小问题;
📅 2023/04/15
- 修复上一版的BUG,主要影响标准文本类与文本视图类;
📅 2023/04/14
- 新增「xxHash类」,速度最快的摘要算法之一,工作速度接近内存的速度限制,实测比 MD5 快几倍以上;
- 完善「CNG加解密」对 PEM 格式 RSA 密钥的支持,抛弃坑爹的 Windows API,改为纯手写转换;
- 线程池类的创建方法增加参数「是否初始化COM」,用于指定是否在线程中自动初始化和清理COM;
- 其他优化;
📅 2023/04/09
- 统一将空格URL编码为%20,而不是 + 号;
- 优化和修正部分代码;
📅 2023/04/04
- 修正部分 bug;
📅 2023/04/02
- 全面使用火山文本程序格式(*.wsv),因此必须将火山更新到 2023-03-29 之后的版本才能使用本模块,建议在安装模块后执行「清理文件.bat」删除旧版残留的文件;
- 「CNG加解密」增加对 PEM 格式 RSA 密钥的部分支持(只支持PEM转BLOB);
- 修正「通用文件对话框.打开选择多个文件」;
- 修正「进程操作类」的模块内存操作;
- 合并 MinHook 的源文件,避免源文件同名冲突;
- 此版本开始公开本模块的 GitHub 仓库(地址本文开头里);
📅 2023/03/10
- 「标准文本类」、「文本视图类」迎来一个里程版,经过多个版本的迭代,已经实现了文本类和字节集类的主要功能,并集成了更多的便捷文本操作和常用的编码转换(如URL编码、十六进制、USC2、BASE64、BASE85、BASE91、MD5);
优点:这两个类配合使用,可以在多种场景下减少内存分配和文本编码转换,比文本型和字节集类的执行效率更高,操作 UTF-8 和多字节文本比使用字节集类更方便;
缺点:其他类库不支持这两个类型,传参需要转换到文本型或字节集类。目前本模块的部分类库已经应用了这两个类型,以后会继续增加支持; - 部分类库实装对象序列化(取对象数据/置对象数据):标准文本类、文本视图类、PivJSON、URL地址构造类、URL地址解析类、表单构造类、表单解析类;
- 「URL地址解析类」和「表单解析类」,取参数值时不需要区分参数名称的大小写;
- 修正「高并发网络访问类」在32位下无法下载的问题;
- 重新封装了一些 排序集(std::set)、排序表(std::map)、哈希集(std::unordered_set)、哈希表(std::unordered_map) 的模板类,补充了一些官方库没完善的地方,比如支持大小写无关文本作为关键字,可以在「PIV基础类/数据处理」分类中找到;
📅 2023/02/21
- 修复线程池类EX;
- 优化并修正「标准文本类」、「文本视图类」;
📅 2023/02/20
- 修正线程池类的两处bug;
📅 2023/02/19
- 「简易HOOK类/多重HOOK类」改为使用源码编译;
- 修正部分代码错误,主要影响 PivJSON;
📅 2023/02/17
- 拆分子模块「PIV静态库」,将 bit7z 和 MMKV 等体积较大的静态库移动到该子模块,主体模块的体积再次缩减到几十MB内;
- 更新了 bit7z,用最新源码重新编译了,应该修复了某些情况下可能出现的编译错误,32 位下压缩失败的原因已查明,不开启进度回调就可以了;
- 优化「标准文本类」、「文本视图类」,增加更多功能;
- 重构「PivJSON」,支持更多文本类型,合并和调整部分方法;
- 新增「表单构造类」、「表单构造类U」、「表单构造类A」,用于快捷填写网络POST请求的表单参数,其中 UTF-8 编码的「表单构造类U」最常用;
- 新增「表单解析类」、「表单解析类U」、「表单解析类A」,用于在服务端解析POST的表单参数;
- 新增「URL地址构造类」,用于快捷创建经过URL编码的地址;
- 「线程池类」、「线程池类EX」现在支持在暂停状态下清空任务,修改了销毁的默认值,优化内部代码;
- 优化了URL编解码;
📅 2023/01/19
- 新增「文本视图类」、「文本视图类U」和「文本视图类A」,封装了对应 Unicode、UTF-8 和 ANSI 编码的 std::basic_string_view;
文本视图本身不拥有文本数据,而是引用其他文本的字符缓冲区,因此使用文本视图不会复制文本数据,速度极高,缺点是不能通过视图修改文本数据; - 新增「文本视图容器类」、「文本视图容器类U」和「文本视图容器类A」,为对应文本视图的数组类(基于std::vector实现);
- 优化重构「标准文本类」(std::basic_string),实现了官方文本类中的大部分功能;
- 新增对应 UTF-8 和 ANSI 编码的「标准文本类U」和「标准文本类A」,以及新增对应的数组类「标准文本容器类U」和「标准文本容器类A」;
- 新增「纳秒时钟类」,这是「格式日志类」中的同款时钟,能获取 1 纳秒级精度的时间戳(Windows API 最高只支持 100 纳秒精度),但用起来比较麻烦,需要在后台定期校准时间,有高精度要求才用吧;
- 「VMProtect」类新增「保护」、「虚拟化保护」、「变异保护」、「超级保护」、「虚拟化保护_锁定序列号」、「超级保护_锁定序列号」等方法,与之前的区别是可以自定义标记名称;
- 优化重构「URL地址解析类」,基于文本视图提升了解析速度;
- 「通用文件对话框」增加参数「不改变目录」;
- 「BASS音频类」的「取所有设备信息」和「取所有录制设备信息」,不再跳过设备号0,所以用法和例子有所改变;
- 修正多处 bug
📅 2022/12/15
- 修正「simdutf」编码转换的两处代码错误;
📅 2022/12/13
- 适配火山12-12的更新,所有静态库已经同时支持MT和MD版,也就是项目属性是否开启「使用静态C++运行时库」都能正常编译;
- 删除全局方法「十六进制文本到整数」和「十六进制文本到长整数」,因为最新版本的视窗基本类已经提供了同名方法;
- 修正多处 bug;
📅 2022/12/03
- 修复上一版导致的一些 bug 和模块冲突(新库继续慢慢磨);
📅 2022/11/25
- 优化 Unicode 编码转换逻辑,PivJson、MMKV 等需要 Unicode 编码转换的库,默认使用系统 API 转码,如果项目编译了 simdutf,就自动切换为使用 simdutf 转码;
现在避免了跟火山模块冲突,因为火山模块也有 simdutf,两个模块同时编译一样的 cpp 源码会报错; - 将「进程操作类」的嵌入语句全部转移到 C++ 文件中,并修正部分问题;
- 移除bit7z的 VS 2015 静态库,因为 VS 2015 不支持火山的文本哈希表;
📅 2022/11/18
- 新增「MMKV键值表」,重新封装了腾讯MMKV,跟官方的相比:
- 完全开源,使用静态库编译,不带dll
- 封装了所有能封装的功能,支持存取更多值类型
- 更完善的备注(吐槽一下腾讯的开源质量,注释太少甚至没有)
- 修正「格式日志类」不兼容Windows 7 SDK的问题,增加方法「加入来源日志」用于处理「MMKV日志事件类」的日志;
- 其他优化;
- 火山模块安装包的压缩率太低,增加EXE版安装包(体积缩减一半以上)
- 火山模块安装包:PIV模块[2022-11-18][vcip].zip
- 可执行安装文件:PIV模块[2022-11-18][exe].zip
- 可执行安装文件使用 Inno Setup 6 打包,便携式安装(无注册表写入和卸载程序),所使用的脚本已包含在压缩包中;
📅 2022/11/10
- 重构JSON库
- 新增「PivJSON」和「PivOrderJSON」,移除「nmJson」和「nmOrderJson」
- 调整了大量的方法和参数,旧项目不想改动的话,可以安装 kyozy 封装的 nlohmann json 解析库
- 使用 simdutf 加速 Unicode 的编码转换,修订注释,完善功能的封装
- 「simdUTF」的部分方法增加后缀为「_Ex」的版本,区别是在参数中返回转换后的文本数据,在某些情况下可以减少内存分配;
- WinHTTP的网络异步访问类增加一个「用户数据」参数,用于标识访问来源或传递指针;
- 将WinHTTP嵌入语句的部分常量名改成数值,以兼容旧版本的Windows SDK(起码7.0以上);
- 其他优化和修正;
📅 2022/10/31
- simdutf的源码更新至2.0.2并重构,新增「simdUTF」,删除「SIMDUTF编码库」;
- 修正了无论是否使用bit7z都附带7z.dll的问题,原因是我定义了一个模板基础类,模板基础类会被强制解析,连带写在包名的头文件、附属文件之类也生效了;
- WinHTTP网页访问返回的Cookies现在包含了重定向过程中的Cookies,「网络请求响应类」增加一个方法「取合并Cookies」;
📅 2022/10/30
- 增加「简易HOOK类」和「多重HOOK类」,封装了GitHub上非常热门的一个Inline Hook库;
- 修正「配置文件操作类」的数个 BUG;
- 修正bit7z的部分问题,由于之前的参数设置错误,重新编译了bit7z的静态库;
- 更新例程;
📅 2022/10/29
-
封装了基于 7z.dll 的 C++ 包装类 bit7z,火山目前最强的文件压缩和解压类库,支持 7-zip 程序的所有格式和基本功能;
- 存档读写类:简易版的封装,只需要执行一个方法就能压缩和解压文件
- 存档解压类:功能完备的解压类,除了解压外可以读取压缩包里的各种信息和属性,支持解压进度反馈
- 存档压缩类:功能完备的压缩类,可以设置所有的压缩选项,支持压缩进度反馈
- 存档编辑类:在压缩类上增加了压缩文件编辑功能,可以对压缩包的项目进行[改名/更新/删除]等操作
- 未封装文件流读写的相关方法,过一两个版本解决
-
优化「格式日志类」:
- 魔改了 fmtlog 的源码,将内部编码从 UTF-8 改为 UTF-16LE,不再需要进行编码转换,大幅增加效率
- 输出的日志文件从 UTF-8 编码改为 UTF-16LE,请注意别把日志写到旧版的文件后面
- 增加「加入文本日志、加入文本日志_间隔」,用于添加不进行格式化的文本内容
-
优化「线程池类」和「线程池类EX」:
- 增加方法「是否需要退出」,用于在销毁线程池时通知线程应该尽快结束
- 「线程池类EX」增加属性读写方法「动态线程周期」,用于后续更改动态调整线程数量的周期时间
- 调整源码结构,优化事件流程,修复调试版销毁线程池时容易与窗口事件冲突的问题
-
新增类「数组P」,提供一些增强的数组操作,部分参考了龙纹的「FP函数扩展」模块;
-
「文本P」增加多字节数组到文本、UTF8字节数组到文本;
-
其他多处优化和修正;
📅 2022/09/16
- 增加类「文本P」,「文本处理类」中的全局方法已标记为弃用;
因此必须将火山更新到飞扬#21 09-15或更新的版本; - 增加类「编码P」,为「编码辅助类」的别名;
- fmt 的源码更新到 9.1.0、fmtlog 更新到 2.2.1;
- 修正「格式日志类」在盘符路径创建日志文件失败的问题;
- 其他细微修正与优化;
📅 2022/08/22
- 文本处理类增加全局方法:整数到中文小写数字、整数到中文大写数字、小数到中文小写数字、小数到中文大写数字、小数到中文小写金额、小数到中文大写金额;
- 编码辅助类增加全局方法「取整数值位数」,可计算整数值的十进制位数,比如10000返回5位;
📅 2022/08/18
- 「网络同步访问类」、「网络异步访问类」等增加成员变量「是否编码网址」,用于控制是否在访问类的内部对网址进行 URL 编码,默认为假;
- 调整「文本_取文本中间」的参数;
- 其他多处细微优化和修正;
📅 2022/07/26
- 新增「简易加解密」,纯 C++ 源码实现,支持 AES、DES、RC4、MD5、SHA1、SHA256、SHA512 几个算法。其中 RC4 支持不固定长度的密码,可以获得与易语言一致的加解密结果;
📅 2022/07/25
- 新增全局类「SIMDUTF编码库」,提供高速的 Unicode 验证和编码转换支持(UTF-8、UTF-16LE、UTF-32LE互转),64 位比火山核心库快几倍,32 位仍有微弱优势,但不支持 Unicode 与 ANSCII 互转;
本模块中编码转换需求较多的类库将逐步改为使用「SIMDUTF编码库」; - 新增「OpenCC简繁转换类」,提供词汇级别的本地中文简繁转换;
- 新增全局类「BASE编解码类」:字节集到BASE91文本、BASE91文本到字节集、字节集到BASE85文本、BASE85文本到字节集;
BASE91 相比 BASE64 节省了 10% 到 19% 的长度,BASE64请用字节集类自带的,自测速度最快,何必用第三方的来DeBuff; - 「标准随机数类」增加方法:取随机字符、取随机汉字、取随机字节集;
- 修正 fmt 与「炫彩界面支持库」冲突的问题;
- 修改部分C++源码的文件名,解决不同模块间的重名冲突;
📅 2022/07/15
- WinHTTP 相关类库的「网页访问」增加两个参数,在内部对 POST 的提交数据进行 URL 编码(默认不编码);
- 修正「配置文件操作类」的部分方法;
- 其他修正;
📅 2022/07/08
- 修正「CNG加解密.密钥派生函数」会崩溃的问题;
- 「快捷方式解析类」改名为「快捷方式操作」,并修复大量问题;
- 新增「全局内存管理类」和「本地内存管理类」,开销较大,一般不建议使用,只用来释放系统API或某些DLL申请的全局或本地内存。
- 新增全局方法「取千位分隔数值文本」;
- 「标准时间类」新增方法「置文件时间」和「到文件时间」,可以转换FILETIME结构体的时间;
- 重新梳理测试,修复和优化调整多处代码;
📅 2022/07/05
- 新增「WinHTTP网络类」,完整封装了WinHTTP,面向精通 HTTP 协议的开发者;
- 新增「网络同步访问类」,面向普通用户的 WinHTTP 二次封装,用法跟官方 Curl 的「网络访问类」一样;
- 新增「网络异步访问类」,面向普通用户的 WinHTTP 二次封装,提供异步的并发式网络访问;
- 新增「网络同步访问类EX」和「网络异步访问类EX」,EX版加了自写的持久 Cookie 管理;
- 「格式日志类」的源码更新到 fmtlog 2.2.0;
- 新增「对象容器类」和「对象容器模板类」;
- 新增类方法「标准时间类.置格林威治时间」;
- 新增全局方法「写文本数组注册项」和「取文本数组注册项」;
- 调整「高并发网络访问类」的部分方法和参数;
- 修正若干错误;
📅 2022/06/14
- 修正和优化「URL编解码类」;
📅 2022/06/13
- 「CNG加解密」增加了下列返回字节集型哈希值的方法:
取数据HMAC_MD5_字节集、取数据HMAC_MD4_字节集、取数据HMAC_MD2_字节集、取数据HMAC_SHA1_字节集、取数据HMAC_SHA256_字节集、取数据HMAC_SHA384_字节集、取数据HMAC_SHA512_字节集 - 修正了「CNG加解密」中 RC4 算法加解密失败的问题;
- 修正了「CNG加解密」解密所得字节集类的尾部,可能有冗余 0 数据的问题;
📅 2022/06/08
- 修正「格式日志类.打开每日日志」的日期错误,增加「日期格式」参数,可以自定义每日日志文件名中的日期格式;
- 格式日志类运行时不再独占日志文件;
- 增加全局方法「小数向上取整」;
- 修正「线程池类」和「线程池类EX」中「是否空闲」的封装错误;
📅 2022/06/05
- 增加「标准随机数类」对象类,及「随机数类_xxx」等一系列不同随机数算法的对象类,为<std::random>的封装,可以产生高质量的伪随机数;
- 增加「配置文件操作类」,提供简易的 ini 配置文件读写操作,支持多字节、UTF8和UTF-16LE编码;
- 增加全局方法「取标准格式文本U8」,能正确处理<std::format>的汉字填充对齐;
- 增加全局方法「创建数值型数组类」和「创建文本型数组类」;
- 「连续加入××」改名「数组连续加入XX」;
📅 2022/05/30
相对于之前单独发布的版本,有以下重要更新:
-
BASS音频库
- 将 dll 文件更新到最新版;
- 调整「BASS音频类.录制回调」事件的返回值,现在是返回0为继续录制,请注意修改源码;
-
格式日志类(fmtlog)
- 优化代码,减少非必要的编码转换,降低性能损失;
- 日志文件名现在支持 Unicode 了;
-
CNG加解密
- 调整类名,避免跟仰望火山模块冲突;
- 将加解密失败后返回原数据,改为返回空字节集;
- 屏蔽「CNG加解密.解密_RSA_公钥」,因为 CNG 的 RSA 公钥不能用来解密;
- 将「CNG_填充方式.对称_块填充」改名为「对称_PKCS7」;
-
高并发网络访问类
- 优化请求信息的提交,提交 JSON 数据时自动加入相关请求头;
- 优化代码结构,减少使用「读指针处对象」;
- 所有事件回调中的「对象指针」改为「传输对象」;
-
时钟队列类
- 弃用自增的时钟序号,改为添加时钟时由用户自定义「时钟标记」;
-
其他(大量未发布过的新内容,这里就不一一列举了)
💌 开源项目
- nlohmann JSON
3.11.3
MIT license
现代 C++ 的 JSON 库 - fmtlog
2.2.1
MIT license
纳秒级精度的高性能异步日志记录库 - {fmt}
10.2.0
MIT license
格式化文本库,等同 C++20 std::format 的实现 - md4c
0.4.8
MIT license
CommonMark 0.30 规范 + GFM 的 Markdown 解析库 - simpleini
4.20
MIT license
简易的 INI 配置文件读写库 - simdutf
5.2.8
Apache-2.0, MIT license
使用 SIMD 指令集加速,每秒数十亿字符的Unicode编码验证和转换库 - OpenCC
1.1.6
Apache-2.0 license
中文简繁转换开源项目,支持词汇级别的转换、异体字转换和地区习惯用词转换 - 7-zip
24.05
GNU LGPL license
免费的高压缩率开源压缩软件(采用GNU LGPL协议,只使用它的 dll 文件不会传染) - bit7z
4.0.7
Mozilla Public License v2.0
7-zip 的封装类 - MinHook
1.3.3
BSD-2-Clause License
极简的 x86/x64 API Hook 库 - MMKV
1.3.5
BSD-3-Clause License
腾讯开源的高效键值对存储框架 - xxHash
8.0.2
BSD-2-Clause License
速度接近 RAM 限制的高速散列算法 - Dear ImGui
1.90.8
MIT license
轻量级的即时渲染界面开发框架 - GLFW
3.3.8
zlib/libpng license
跨平台的 OpenGL/Vulkan 桌面应用框架 - glad
2023-04-04
MIT License
多语言的Vulkan/GL/GLES/EGL/GLX/WGL加载程序生成器 - SDL
2.26.5
Zlib license
Simple DirectMedia Layer 是一个跨平台的多媒体开发库 - Vulkan SDK
1.3.246.1
Apache-2.0
一个跨平台的2D和3D绘图应用程序接口 - libgo
3.0
MIT license
Golang 风格的 C++11 协程库
※本模块封装的开源项目均采用较宽松的开源协议,如 MIT、BSD、MPLv2 ……
🧰 闭源项目
本模块封装了以下闭源项目:
支付宝扫码打赏
微信扫码打赏
本博客文章采用 知识共享(Creative Commons) 署名-非商业性使用-禁止演绎 4.0 进行许可。