0

我的原型文件如下所示:

message HqMessage {
    uint32 busi_no          = 1;
    google.protobuf.Any detail      = 2;
}

message B0T4F1 {
    uint32 MarketType               = 501;
}

//------------------------------------------------ ---------------------

STEP1,使用protobuf的反射,我已经将BOT4F1的消息设置为'detail':


const google::protobuf::Descriptor* _detail_des = _des_pool->FindMessageTypeByName("B0T4F1");
const google::protobuf::Message* _detail_prototype_message = m_dynamic_factory.GetPrototype(_detail_des);
google::protobuf::Message* _detail_msg = _detail_prototype_message->New();
const google::protobuf::Reflection* _detail_msg_ref = _detail_prototype_message->GetReflection();
const google::protobuf::FieldDescriptor* _detail_fd = _detail_des->FindFieldByNumber(501);
uint32 mkt_type =100;
_fd = _des->FindFieldByNumber(2);
_msg_ref ->**SetAllocatedMessage**(_msg, _detail_msg, _fd);

STEP2,将消息序列化到缓冲区,然后从缓冲区中解析HqMessage。

STEP3,首先,我得到Any的消息,然后将any消息序列化再次缓冲。最后,通过新缓冲区获取B0T4F1的消息对象。

如何在不再次序列化“详细”消息的情况下将缓冲区解析为 B0T4F1 的消息?我可以直接从“HqMessage”获取“B0T4F1”消息吗?我怎样才能做到这一点?

4

0 回答 0