# commonResourceExtractor
**Repository Path**: laudasur/common-resource-extractor
## Basic Information
- **Project Name**: commonResourceExtractor
- **Description**: 基于dll/lua插件技术的通用游戏资源解包器
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2026-03-30
- **Last Updated**: 2026-03-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# commonResourceExtractor
参考了痴汉公贼的crass++解包器程序设计: https://gitee.com/h128/Crass-source
顶想云文档
## 编译
1. 安装mingw
2. 安装xmake
3. xmake build
需要32位请手动编译
## 切换debug release
1. xmake f -m release
2. xmake f -m debug
## 使用
```bash
commonResourceExtractor.exe [参数]
commonResourceExtractor -f 指定要转换的单个文件
commonResourceExtractor -p 指定要批量转换的目录
commonResourceExtractor -path 指定要批量转换的目录
commonResourceExtractor -o 指定输出的目录(默认output)
commonResourceExtractor --output 指定输出的目录(默认output)
commonResourceExtractor -P 使用特定的插件解包(插件名为源码中注册的插件名,参考 MYDAT插件的第95行std::string pluginName = "MYDAT")
commonResourceExtractor --plugin 使用特定的插件解包(插件名为源码中注册的插件名,参考 MYDAT插件的第95行std::string pluginName = "MYDAT")
commonResourceExtractor --list 显示所有已安装插件信息
commonResourceExtractor --version 显示版本信息
commonResourceExtractor -V 显示版本信息
commonResourceExtractor --verbose是否开启详细输出
commonResourceExtractor -m [pluginMode] 插件模式,lua或者dll;
commonResourceExtractor --mode [pluginMode] 插件模式,lua或者dll;
```
## 注意
使用特定插件进行解包时,如果是dll模式,--plugin参数的值必须为源码中注册的插件名,参考 MYDAT插件的第95行std::string pluginName = "MYDAT"),
如果是lua模式,--plugin参数的值必须为lua脚本文件名如test.lua
## 关于dll插件的开发
1. 参考plugin/MYDAT/MYDAT.cpp
```c++
#include "../../include/plugin.h"
#include "../../include/plugin_error.h"
// 必须实现的函数
extern "C" __declspec(dllexport) void show_plugin_info(struct plugin_information *info);
extern "C" __declspec(dllexport) int register_plugin(struct plugin_register_callback *callback);
/* 封包处理回调函数集合 */
static plugin_ext_operation;
// 封包处理回调函数集合原型 这些函数必须实现,或者未实现的使用NULL参数填充
struct plugin_ext_operation
{
bool (*match)(std::string& fileName); /* 是否支持该封包 */
int (*extract_directory)(std::string dirName); /* 提取directory数据 */
int (*extract_resource)(std::string package_path,std::string output_dir); /* 提取资源文件数据 */
int (*save_resource)(const char *fileName); /* 保存资源数据 */
void (*release)(std::ifstream fin); /* 释放相关资源 */
};
```
## 关于lua插件开发
1. 参考lua/MYDAT.lua
2. 参考lua/test_use_cpp_parse_binary_file.lua
## 关于lua插件的内置二进制文件处理模块
1. 参考src/lua_plugin/binary_parser.cpp
在lua用表定义二进制文件结构,然后调用binary_parser的函数进行解包
对于更加细节的处理优先推荐开发和使用dll插件,lua插件适用于快速开发(但是没有dll插件那么功能强大)