使用protobuf的反射来动态生成Message并赋值

本文介绍了如何使用protobuf的反射功能动态生成Message并赋值,适用于处理复杂的嵌套message和repeated属性。通过CMarkup解析XML数据,结合protobuf的DescriptorPool和MessageFactory,实现了动态创建和填充protobuf消息对象。文中提供了核心代码示例,详细解释了处理嵌套message和repeated字段的逻辑。
摘要由CSDN通过智能技术生成

前言:

公司做了个项目,使用protobuf,各功能号会不断增加,message也会一直变,我做为测试人员,需要做一个测试工具,前期可以通过mfc画图,就是画出message的各个属性对应的输入框,之后按照格式,遍历对应的message,读取输入框的数据来一个个赋值。这样一来,功能号少的时候,还没什么,多画点输入框就是了。后来,message嵌套越来越复杂,其中还夹杂着repeated的属性,repeated中还有repeated、子message,直接崩溃。于是就决心查资料做了这个动态生成的,用CMarku从xml读取数据,感觉挺好用,留个档,也希望对其他人能有个帮助。

预期读者:

对protobuf有一定了解,至少已经跑通过程序,只是遇到了和我类似的问题,现在要使用protobuf的动态生成message并赋值、发送消息给服务端。

理论方面,可以查看大牛的http://blog.csdn.net/solstice/article/details/6300108介绍,说的很细。

正文:

如果我在这里大谈理论,可能就是班门弄斧了,那么废话不多说,直接上代码,上核心代码。

根据message name来生成message


Message* createMessage(const std::string& typeName)
{
    google::protobuf::Message* message = NULL;
    const google::protobuf

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值