| 表格选择 | 表格编辑器 |
|---|---|
![]() |
![]() |
- 二进制表格解析: 支持自定义 Schema 定义的二进制数据文件读写
- 现代化 UI: 基于 Avalonia 的跨平台界面,支持 Light/Dark 主题切换
- 多语言支持: 内置中英文界面切换
- 版本控制: 自动备份、变更追踪、历史版本恢复
- 图标显示: 支持记录图标预览(自动匹配资源目录)
- 灵活配置: 可配置 ID/名称/图标字段,支持额外搜索字段
- 头部编辑器: 十六进制头部数据查看与编辑
- 记录管理: 支持添加、复制、删除记录
- C++ 核心引擎: 专注于数据处理和二进制解析
- Avalonia UI: 现代化跨平台界面
- Schema 驱动: JSON Schema 定义表格结构,运行时反射
| 组件 | 技术 |
|---|---|
| 后端 | C++17 + nlohmann/json |
| 前端 | C# + Avalonia 11 + Semi.Avalonia |
| 架构 | MVVM + ReactiveUI |
| 平台 | Windows / Linux / macOS |
BinTable/
├── BinTable.Core/ # C++ 后端 (DLL)
│ ├── include/BinTable/ # 头文件
│ │ ├── Api.h # C API 导出接口
│ │ ├── Schema.h # Schema 解析
│ │ ├── Table.h # 表格数据容器
│ │ ├── TableEngine.h # 表格引擎
│ │ └── Types.h # 类型定义
│ ├── src/ # 源文件
│ ├── third_party/ # 第三方库 (nlohmann/json)
│ ├── test/ # 测试程序
│ └── CMakeLists.txt # CMake 配置
│
├── BinTable.UI/ # C# 前端 (Avalonia)
│ ├── Views/ # XAML 视图
│ ├── ViewModels/ # MVVM 视图模型
│ ├── Services/ # 业务服务
│ │ ├── ConfigService # 配置管理
│ │ ├── HistoryService # 版本历史
│ │ ├── IconService # 图标加载
│ │ ├── LocalizationService # 多语言
│ │ ├── TableService # 表格服务
│ │ └── ThemeService # 主题切换
│ ├── Interop/ # P/Invoke 声明
│ ├── Models/ # 数据模型
│ └── BinTable.UI.csproj
│
├── schemas/ # Schema 定义文件
├── data/rdf/ # 数据文件目录
├── png/ # 截图资源
└── README.md
cd BinTable.Core
mkdir build && cd build
cmake ..
cmake --build . --config Release生成 BinTable.Core.dll
下载 json.hpp 到 BinTable.Core/third_party/nlohmann/
cd BinTable.UI
dotnet restore
dotnet run注意: 需要将
BinTable.Core.dll复制到输出目录
cd BinTable.UI
dotnet publish -c ReleaseSchema 使用 JSON 定义表格结构:
{
"name": "WorldTable",
"displayName": "世界表",
"binaryFile": "Table_World_Data.rdf",
"alignment": 4,
"headerSize": 4,
"fields": [
{
"name": "tblidx",
"displayName": "ID",
"type": "uint32",
"key": true
},
{
"name": "szName",
"type": "string",
"size": 33
},
{
"name": "vStart",
"type": "vector3"
},
{
"name": "values",
"type": "array",
"elementType": "int32",
"count": 5
}
]
}| 类型 | 别名 | 说明 | 大小 |
|---|---|---|---|
int8 |
char, byte |
有符号 8 位整数 | 1 |
uint8 |
uchar, ubyte, BYTE |
无符号 8 位整数 | 1 |
int16 |
short |
有符号 16 位整数 | 2 |
uint16 |
ushort, WORD |
无符号 16 位整数 | 2 |
int32 |
int, long |
有符号 32 位整数 | 4 |
uint32 |
uint, ulong, DWORD, TBLIDX |
无符号 32 位整数 | 4 |
int64 |
longlong |
有符号 64 位整数 | 8 |
uint64 |
ulonglong, QWORD |
无符号 64 位整数 | 8 |
float |
single |
32 位浮点数 | 4 |
double |
- | 64 位浮点数 | 8 |
bool |
boolean |
布尔值 | 1 |
string |
str, ansi |
ANSI 字符串 | 需指定 size |
wstring |
wstr, unicode, WCHAR |
Unicode 字符串 | 需指定 size |
vector2 |
vec2, float2 |
float[2] | 8 |
vector3 |
vec3, float3, CNtlVector |
float[3] | 12 |
vector4 |
vec4, float4 |
float[4] | 16 |
bytes |
binary, blob |
原始字节 | 需指定 size |
array |
array1d |
一维数组 | 需指定 elementType + count |
array2d |
- | 二维数组 | 需指定 elementType + count + count2 |
数组支持通过 displayMode 属性设置三种显示模式:
| 模式 | 说明 | 示例 |
|---|---|---|
expanded |
逐元素展开显示(默认) | test[0]: 1, test[1]: 2, test[2]: 3 |
compact |
以逗号分隔的字符串显示 | test[3]: "1,2,3" |
rowExpanded |
二维数组按行展开 | test[0][x]: "1,2", test[1][x]: "3,4" |
#include "BinTable/Api.h"
// 创建引擎
auto handle = BinTable_Create();
BinTable_Initialize(handle, "schemas", "data/rdf");
// 打开表格
BinTable_OpenTable(handle, "WorldTable");
// 读取数据
int count = BinTable_GetRecordCount(handle);
const char* json = BinTable_GetRecord(handle, 0);
// 使用 json...
BinTable_FreeString(json);
// 清理
BinTable_Destroy(handle);using BinTable.UI.Services;
var service = new TableService();
service.Initialize("schemas", "data/rdf");
service.OpenTable("WorldTable");
var count = service.GetRecordCount();
var json = service.GetRecordJson(0);
service.Dispose();┌─────────────────┐ JSON ┌─────────────────┐
│ Avalonia UI │◄────────────►│ BinTable.Core │
│ (C# MVVM) │ P/Invoke │ (C++ DLL) │
└─────────────────┘ └─────────────────┘
│
Schema ─────┼───── Binary
(.json) │ (.rdf)
▼
┌───────────────┐
│ 文件系统 │
└───────────────┘
- 核心架构搭建
- Schema 解析
- 二进制读写
- C API 导出
- P/Invoke 封装
- 基础 UI 框架
- 字段编辑功能
- 多语言支持 (中/英)
- 主题切换 (Light/Dark)
- 版本历史与备份恢复
- 图标显示支持
- 变更追踪与差异查看
- 记录添加/删除/复制
- AOT 发布支持
- 数组类型支持 (一维/二维)
- 变长字符串支持
- 嵌套结构体支持
- 嵌套结构内一维数组
- 撤销/重做
MIT License

