JSON и C-заголовок нативного интерфейса
Проверенные команды выгрузки, структура данных и границы ABI-проверки.
Эти файлы нужны авторам нативных привязок и генераторов кода. Для обычной игровой логики C# используйте управляемый SDK и его справочник; JSON интерфейса не является библиотекой C#.
Получите данные от нужной сборки
Откройте PowerShell в отдельной рабочей папке проекта: команды записывают файлы в текущий каталог и могут заменить одноимённые. В переменной editor укажите путь к установленному редактору с поддержкой этих инструментов.
$editor = "C:\Tools\Reckfell\Reckfell Engine.console.exe"
& $editor --headless --path . --dump-reckfellextension-interface-json --dump-reckfellextension-interface --dump-extension-apiОжидаются три файла:
| Файл | Содержимое |
|---|---|
| reckfellextension_interface.json | Низкоуровневые C-типы и функции интерфейса |
| reckfellextension_interface.h | C-заголовок того же интерфейса |
| extension_api.json | Классы, методы, встроенные типы и их метаданные для привязок |
Используйте набор от одного целевого бинарника. Номер продукта 1.0.0 сам по себе не идентифицирует конкретную сборку: сохраните хеш исполняемого файла и полученных данных. Успех команды и наличие JSON не доказывают корректность всех ABI-вызовов.
Структура JSON интерфейса
Верхний уровень содержит format_version, $schema, types и interface. _copyright хранит исходные сведения об авторских правах и лицензии; не удаляйте их при распространении производных файлов.
format_version описывает формат JSON, не версию движка и не ABI-пакет. В проверенном дампе он равен 1. $schema задаёт относительный путь ./reckfellextension_interface.schema.json; выгрузка интерфейса не создаёт рядом сам файл схемы. Для полной проверки нужна соответствующая локальная схема, а не только открывающийся JSON.
| kind в types | Что должен сохранить генератор |
|---|---|
| enum | Имена и числовые значения; is_bitfield отличает маску флагов |
| handle | Непрозрачный указатель, признаки const/неинициализированного значения и связь parent |
| alias | Указанный базовый C-тип с модификаторами |
| struct | Порядок полей, C-выравнивание и размеры для целевого ABI |
| function | Тип возвращаемого значения и упорядоченные типы аргументов указателя на функцию |
У аргументов function обязательным для генерации является type; name может отсутствовать. Генератор должен уметь создать локальное имя параметра. Отсутствующий return_value означает отсутствие возвращаемого значения, а не неизвестный тип.
Нельзя объявлять все handles владеющими объектами или считать указатель готовым значением: учитывайте const, uninitialized и конкретный контракт функции. size_t и указатели зависят от архитектуры. Типы char, char16_t, char32_t и wchar_t не взаимозаменяемы; длина/кодировка определяются конкретной функцией.
Функции и разрешение адресов
Массив interface перечисляет функции, доступные через ReckfellExtensionInterfaceGetProcAddress. Разрешайте имена точно как в дампе; проверяйте отсутствующий адрес до вызова. Сигнатура указателя, порядок аргументов и calling convention должны соответствовать заголовку целевой сборки.
since и deprecated — метаданные истории интерфейса; не подменяйте ими версию продукта и проверку наличия функции. В deprecated ключ замены называется replace_with, не replacement. Не меняйте идентификаторы, числовые enum и имена функций для перевода или собственной косметики.
extension_api.json решает другую задачу: он описывает высокоуровневые классы/методы. Его header содержит версию продукта и precision. Для генерации вызовов классов нужны оба уровня данных; один список C-функций не содержит полного API классов.
Обнаруженные ограничения проверки
Установленный редактор создал все три файла, однако выгрузка API классов выдала 17 предупреждений вида mapped to non-existent hash из таблицы сопоставления хешей. Они сохранены в техническом отчёте и не исправлены в движке. Наличие дампа не позволяет объявить эту таблицу или все нативные вызовы исправными.
При такой диагностике проверьте согласованность сборки и SDK, конкретный требуемый метод и нативный тест его вызова. Не подавляйте предупреждения как доказательство успеха и не переписывайте хеши вручную в сгенерированном JSON.
Проверены реальные команды, выбранные поля и имена текущего дампа. Полная JSON Schema-валидация, генерация стороннего binding, выравнивание всех структур и все платформы этим не подтверждаются.