Копирование байтов из Protobuf с использованием C ++ для отправки через GRPC приводит к ошибкам - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь скопировать байты в вызов функции GRPC из protobuf в C ++, и все время получаю сообщение об ошибке.

message Foo {
    int32 value=1;
    bytes data=2;
}

В некотором базовом коде я создаю Foo как переменную-член,затем возвращаем Foo.

Foo SomeClass::DoSomething() {
    Foo fooTemp;
    fooTemp.set_value(5);
    fooTemp.set_data("Blah");
    return fooTemp;
}

Затем в моем коде GRPC я получаю:

// rpc DoFoo(Params) returns (Foo){}
Status Server::CaptureImage( ServerContext* context, const Params* call, Foo* retVal ) {
    retVal->CopyFrom( SomeClass.DoSomething());
    return Status::OK;
}

Я получаю неопределенные ошибки на стороне клиента GRPC.Разве CopyFrom не копирует байты, лежащие в основе?Нужно ли мне навязывать им глубокую копию?Я просто пропускаю функцию, которая должна работать?

Если я изменю свой GRPC-сервер для непосредственной установки данных, то ошибка клиента исчезнет, ​​и я получу значения.

// rpc DoFoo(Params) returns (Foo){}
Status Server::CaptureImage( ServerContext* context, const Params* call, Foo* retVal ) {
    retVal->CopyFrom( SomeClass.DoSomething());
    retVal->set_data("Blah")
    return Status::OK;
}

Это возвращается клиенту в порядке с Blah и 5.У кого-нибудь есть хороший пример кода, как копировать protobuf друг в друга?

...