ProtocolBuffer之Windows配置&C++实例



资源包下载地址为:http://code.google.com/p/protobuf/downloads/ ,之前网络一直有问题,没有下载成功最新版本,从优快云上下载了2.3.


配置:

1、解压压缩包后,会得到类似于下面的文件列表:

文件列表

2、在解压后的文件夹中,打开vsprojects目录,目录中的文件如图所示:

vsprotects目录文件


打开libprotobuf.vcproj(这个是vs的工程文件,打开前请确认安装了vs2005 或vs2008,vs2010等等),在打开工程中,   可能需要转换工程,直接转换就行了

打开后,vs的工程页面如图所示:

工程列表

右键分别生成libprotobuflibprotobuf-litelibprotocprotoc这四个工程(编译模式为Release 模式):

生成lib文件

3、编译完成后,可以在vsprojects\Release下发现3个lib和一个exe文件,他们分别是libprotobuf.liblibprotobuf-lite.liblibprotoc.libprotoc.exe :

lib文件列表

4、将得到的libprotobuf.liblibprotobuf-lite.liblibprotoc.libprotoc.exe拷贝到系统盘的windows目录下。如果你的系统安装在C盘,那么就拷贝到c:\windows目录下

5、假设在E:\test目录下有一个名为addressbook.proto的proto文件,那么打开CMD,输入下面的命令就可以生成C++源码了:

生成c++源码文件

生成了addressbook.pb.h和addressbook.pb.cc文件,将这个文件拷贝到需要用到的工程。

6、将vsprojects目录下的google目录复制到vs安装目录的VC\\include(这一步很重要,因为include<>导致编译器在系统头文件目录搜索protobuf头文件)

7、具体工程中要导入静态库 如:#pragma comment(lib,"libprotobuf.lib") (目前还不知道那三个分别有什么作用)



C++实例:

1、创建. proto文件,文件中定义你需要做串行化的数据结构信息,下面定义个Order. Proto



package xquant;
option java_package = "com.xquant";
option java_outer_classname = "Order";
 

message Order {

  required int32 action = 1;

  required string serialNo = 2;        

  required string version = 3;

  optional string operator = 4;

  required string code = 5;

  required string name = 6;

  required string price = 7;

  required string amount = 8;

}
2、使用google protoc.exe 生成对应的C++ 文件,在CMD 命令框中输入如下命令(路径根据实际情况修改):

protoc.exe -I=d:\test --cpp_out=d:\test d:\test\Order.proto

生成文件:

order.pb.h

order.pb.cc

3、新建C++工程Demo,把order.pb.horder.pb.cc加入工程中,添加lib

#   pragma comment(lib"libprotobuf.lib")

代码如下:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include "order.pb.h"
using namespace std;
#pragma comment(lib, "libprotobuf.lib")
 
void initOrder(xquant::Order* order) {
  order->set_action(100);
  order->set_serialno("100abc");       
  order->set_version("1.00.003");
  string code = "TF0001";
  order->set_code(code);
  string name = "test";
  order->set_name(name);
  order->set_price("10.01");
  order->set_amount("10000000.00");
}
 
int _tmain(int argc, _TCHAR* argv[])
{
         GOOGLE_PROTOBUF_VERIFY_VERSION;
 
         // 组装报文
         xquant::Order order;
         initOrder(&order);
 
         // 对象序列化为string
         string order_str;
         order.SerializeToString(&order_str);
         cout << order_str << endl;
         // 显示调式报文
         string order_debug = order.DebugString();
         cout << order_debug << endl;
 
         // string反序列化为对象
         xquant::Order order_2;
         order_2.ParseFromString(order_str);
         cout << order_2.code() << endl;
         cout << order_2.name() << endl;
 
         google::protobuf::ShutdownProtobufLibrary();
 
         getchar();
 
         return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值