Protobuf динамическая и статическая библиотека - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть две пользовательские библиотеки protobuf.Один динамический, другой статический.Статическая библиотека имеет сообщение:

message DataType
{
    int number = 1;
    string name_1 = 2;
    string name_2 = 3;
    string name_3 = 4;
}

// The dynamic lib has a message:
message MyMessage
{
    DataType type = 1;
}

Я создаю динамическую протобиблиотеку со связыванием статической протобиблиотеки с ней.Затем я создаю exe-приложение, с которым я связываю динамическую прото-библиотеку.

Проблема в том, что когда я устанавливаю один из name_1, name_2 или name_3, они все имеют это значение.Я думаю, что все эти строки имеют одинаковый буфер.Если преобразовать динамический lib в статический, то проблема исчезнет.Может ли кто-нибудь объяснить мне, что с ним не так?Спасибо.

1 Ответ

0 голосов
/ 30 декабря 2018

Если поле не установлено, оно должно вернуть пустую строку.Пожалуйста, ознакомьтесь с документацией здесь .

Если вы используете версию 2, вы можете запросить, задано ли поле для has_name_x().

Кстати, есть несколько способовчтобы установить значение:

  • Самый простой создает копию: void set_name_x(const string& value)
  • В случае C++11 вы можете переместить строковое значение: void set_name_x(string&& value)
  • Вы можете передать указатель: void set_allocated_name_x(string* value)
  • Вы можете получить указатель на сохраненную строку: string* mutable_name_x()

Я бы посоветовал ознакомиться с protobuf и позволить ему управлять памятьюи используйте set_name_x.Если этого недостаточно, вы можете оптимизировать свой код с помощью ручного управления памятью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...