Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Сериализация протобафов в екстернале

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
14 Янв 2024
Сообщения
122
Реакции
10
В контексте дота2: ?$CNetMessagePB@$0EAAAAAAA@VNetMessagePacketStart@@$0L@$00$0 : CNetMessage : NetMessagePacketStart : google::protobuf::internal::ZeroFieldsBase : google::protobuf::Message : google::protobuf::MessageLite

1) Есть екстернал, только чтение без исполнения и записи.
2) Получаю адреса входящих сообщений.
3) Адрес содержит объект класса google::protobuf::Message
4) Что сделать, чтобы появилась возможность вызывать методы как в интернале, например GetMetadata()?

Понимаю, что надо перестраивать подкапотную логику протобафов, но не получается.
Может быть у кого-то есть готовое решение для чтения протобафов в екстернале.
 
иди интернал
или как вариант можешь протобаф скопировать к себе в память и вызывать методы чтения из его копии
 
как вариант можешь протобаф скопировать к себе в память и вызывать методы чтения из его копии
пробовал, крашит
там в корне используются ещё дескрипторы, мб их тоже надо себе в память копировать....
C++:
Expand Collapse Copy
  return ::_pbi::AssignDescriptors(
      &descriptor_table_google_2fprotobuf_2fapi_2eproto_getter, &descriptor_table_google_2fprotobuf_2fapi_2eproto_once,
      file_level_metadata_google_2fprotobuf_2fapi_2eproto[0]);
 
В экстернале методы mmessage не взлетят - они завязаны на глобальные дескрипторы. Копия объекта всё равно полезет в их таблицы и крашнет. Нужно тянуть весь descriptor pool или писать свой парсер. Тут тебе либо интернал, либо кастомный protobuf-parser
 
Нужно тянуть весь descriptor pool или писать свой парсер. Тут тебе либо интернал, либо кастомный protobuf-parser
В интернале всё работает, но цель - екстернал.
Что менее трудоёмко: тянуть в свою память descriptor pool или свой протобаф парсер? Мб есть уже готовое решение кастомного протобаф парсера?
 
тащить весь descriptor pool в свою память сложно нужно копировать все дескрипторы, таблицы и зависимости и тд и легко что-то пропустить и словить краш. проще написать свой protobuf парсер, а готовое решение - хз
В интернале всё работает, но цель - екстернал.
Что менее трудоёмко: тянуть в свою память descriptor pool или свой протобаф парсер? Мб есть уже готовое решение кастомного протобаф парсера?
 
Назад
Сверху Снизу