资源包下载地址为:http://code.google.com/p/protobuf/downloads/ ,之前网络一直有问题,没有下载成功最新版本,从优快云上下载了2.3.
配置:
1、解压压缩包后,会得到类似于下面的文件列表:
2、在解压后的文件夹中,打开vsprojects目录,目录中的文件如图所示:
打开libprotobuf.vcproj(这个是vs的工程文件,打开前请确认安装了vs2005 或vs2008,vs2010等等),在打开工程中, 可能需要转换工程,直接转换就行了
打开后,vs的工程页面如图所示:
右键分别生成libprotobuf,libprotobuf-lite,libprotoc,protoc这四个工程(编译模式为Release 模式):
3、编译完成后,可以在vsprojects\Release下发现3个lib和一个exe文件,他们分别是libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib和protoc.exe :
4、将得到的libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib和protoc.exe拷贝到系统盘的windows目录下。如果你的系统安装在C盘,那么就拷贝到c:\windows目录下
5、假设在E:\test目录下有一个名为addressbook.proto的proto文件,那么打开CMD,输入下面的命令就可以生成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.h和order.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;
}






1754

被折叠的 条评论
为什么被折叠?



