Документация
/
Docs/ru/reference/native-extension/bindings.md
Правила нативного биндинга
Сгенерированный справочник. Не редактируйте его напрямую. Обновите BuildTools/NativeExtensionInterface.json, затем выполните python BuildTools/docs_native_extension.py --write.
Эти правила образуют переиспользуемую границу. Настройка проектных зависимостей, нативное состояние, настройки и упаковка остаются во владении проекта.
| Стабильный ID |
Правило |
Требование |
Причина |
native-extension.binding.registration-order |
Порядок регистрации |
Вызывайте AddEngineSources после AddThirdPartyLibraries и до точки входа стадии RegisterEngineSources. |
Проектные файлы должны попасть в списки исходников ролей и FO_SOURCE_META_FILES до настройки кодогенерации и базовых библиотек. |
native-extension.binding.namespace |
Пространство имён движка |
Объявляйте экспорты метаданных внутри FO_BEGIN_NAMESPACE/FO_END_NAMESPACE, а определения квалифицируйте через FO_NAMESPACE. |
Один исходник должен компилироваться как с включённым, так и с выключенным настроенным пространством имён движка. |
native-extension.binding.script-export |
Граница экспорта в скрипты |
Используйте FO_SCRIPT_API с поддерживаемым тегом метаданных ///@; не добавляйте макросы входа трассировки стека в экспортируемые тела. |
Кодогенерация разбирает объявление и создаёт границу регистрации между нативным кодом и скриптами. |
native-extension.binding.pointer-contract |
Контракт указателей |
Используйте ptr<T>/nptr<T> для заимствований дескрипторов движка, а для владения — словарь владеющих указателей движка. |
Кодогенерация отклоняет сырые указатели на дескрипторы, а nullable-семантика должна совпадать в нативных и скриптовых объявлениях. |
native-extension.binding.compatibility |
Совместимость |
Пересобирайте и перезапекайте каждое проектное изменение нативных метаданных для закреплённой ревизии движка. |
Зарегистрированные метаданные и наличие большинства хуков входят в сгенерированное состояние совместимости; бинарная совместимость независимых ревизий не обещается. |
native-extension.binding.dependencies |
Зависимости |
Объявляйте проектные библиотеки, пути включения, определения компилятора, платформенные условия и содержимое пакета во встраивающем проекте. |
AddEngineSources отвечает только за маршрутизацию исходников; движок не выводит автоматически правила проектных зависимостей и распространения. |
Минимальный экспортируемый метод
#include "Common.h"
#include "Server.h"
FO_USING_NAMESPACE();
FO_BEGIN_NAMESPACE
///@ ExportMethod
FO_SCRIPT_API int32_t Server_Game_ProjectValue(ptr<ServerEngine> server);
FO_END_NAMESPACE
int32_t FO_NAMESPACE Server_Game_ProjectValue(ptr<ServerEngine> server)
{
ignore_unused(server);
return 1;
}
Экспортируемое тело намеренно не содержит макроса входа трассировки стека. Обычные неэкспортируемые нативные функции сохраняют стандартное соглашение движка о трассировке стека.