虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > WindowsPhone/WindowsMobile > Windows下VC++使用protobuf

Windows下VC++使用protobuf
类别:WindowsPhone/WindowsMobile   作者:码皇   来源:互联网   点击:

Protocol Buffers(protobuf)是Google提供的一个开源序列化框架,类似XML,JSON,其最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通

Protocol Buffers(protobuf)是Google提供的一个开源序列化框架,类似XML,JSON,其最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持c++、java、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。

下面将说明如何在windows下VC++使用protobuf

一、前期准备

1、下载protobuf源代码,有两种方式选择:

 

二、编译protobuf

1、进入vsprojects目录,执行extract_includes.bat 提取项目头文件

这时候当前目录会生成include目录

2、打开项目文件protobuf.sln,编译libprotobuf 和 protoc

这时候编译目录会生成libprotobuf.lib和protoc.exe

注意了,debug编译后的文件用于debug项目,release编译后的文件用于release项目,否则会出错。

 

    /******** 无情的分割线 ********* / 作者:没有开花的树 博客:blog.csdn.net/mycwq / ******* 无情的copy *********/

 

三、在项目中使用protobuf

1、新建一个win32 控制台应用程序,命名为pbtest

2、把上面的include目录、libprotobuf.lib和protoc.exe放到工程目录下

3、写一个proto文件,保存为person.proto,代码如下:

 

    message Person {
    required int32 id = 1;
    required string name = 2;
    optional string email = 3;
    }
4、写一个批处理文件,保存为build.bat,代码如下:

 

 

    protoc --cpp_out=./ person.proto
5、运行批处理build.bat,生成proto协议文件person.pb.h和person.pb.cc,加到项目中

 

6、修改项目属性VC++ 目录包含目录添加“include”

7、修改pbtest.cpp文件,代码如下:

 

    #include #include #include #include person.pb.husing namespace std;
    #pragma comment(lib, libprotobuf.lib)int main(int argc, char* argv[]){
    //校验协议版本 GOOGLE_PROTOBUF_VERIFY_VERSION;
    Person person;
    //将数据写到person.pb文件 person.set_id(123);
    person.set_name(Bob);
    person.set_email(bob@example.com);
    fstream out(person.pb, ios::out | ios::binary | ios::trunc);
    person.SerializeToOstream(&out);
    out.close();
    //从person.pb文件读取数据 fstream in(person.pb, ios::in | ios::binary);
    if (!person.ParseFromIstream(&in)) {
    cerr << Failed to parse person.pb. << endl;
    exit(1);
    }
    cout << ID: << person.id() << endl;
    cout << name: << person.name() << endl;
    if (person.has_email()) {
    cout << e-mail: << person.email() << endl;
    }
    getchar();
    return 0;
    }
8、编译项目,效果如下:

 


 

demo下载:http://download.csdn.net/detail/cwqcwk1/6810611

参考:

http://blog.csdn.net/mycwq/article/details/17606527

 

相关热词搜索: