zoukankan      html  css  js  c++  java
  • google protocol buffer试用

    http://code.google.com/p/protobuf/上下载protobuf-2.3.0,解压后,打开vsprojects文件夹,然后用VS2005打开protobuf开始编译,然后生成libprotobuf,libprotobuf-lite,libprotoc三个lib,同时生成了include文件夹。。。具体操作看vsprojects下面的readme文件来看。。。。

    之后新建一个记事本txt文件(book.txt)在里面写

    package tutorial;
    message Person {
     required string name = 1;
     required int32 id = 2;
     optional string email = 3;
     
     enum PhoneType {
     MOBILE = 0;
     HOME = 1;
     WORK = 2;
     }
     
     message PhoneNumber {
     required string number = 1;
     optional PhoneType type = 2 [default = HOME];
     }
     
     repeated PhoneNumber phone = 4;
    }
     
    message AddressBook {
     repeated Person person = 1;
    }

    然后在dos命令行下对该文件进行重命名:rename book.txt book.proto,然后在dos命令行下protoc.exe -I=. --cpp_out=. book.proto,就可以生成两个文件book.pb.cpp, book.pb.h。

    代码:(转载)

    void PromptForAddress(tutorial::Person* person);
    void ListPeople(const tutorial::AddressBook& addressbook);

    int AddPerson();
    int ViewPerson();

    int main()
    {

     AddPerson();
     ViewPerson();
     return 0;
    }

    void PromptForAddress(tutorial::Person* person)
    {
     std::cout <<"Enter person ID number: ";
     int id;
     std::cin>> id;
     person->set_id(id);
     std::cin.ignore(256, '/n');

     std::cout <<"Enter name: ";
     std::getline(std::cin, *person->mutable_name());

     std::cout <<"Enter email address (blank for none): ";
     std::string email;
     std::getline(std::cin, email);
     if (!email.empty())
      person->set_email(email);

     while (true)
     {
      std::cout <<"Enter a phone number (or leave blank to finish): ";
      std::string number;
      std::getline(std::cin, number);
      if (number.empty())
       break;

      tutorial::Person::PhoneNumber* phonenum = person->add_phone();
      phonenum->set_number(number);

      std::cout <<"Is it a mobile, home or work phone? ";
      std::string type;
      std::getline(std::cin, type);
      if ("mobile" == type)
       phonenum->set_type(tutorial::Person::MOBILE);
      else if ("home" == type)
       phonenum->set_type(tutorial::Person::HOME);
      else if ("work" == type)
       phonenum->set_type(tutorial::Person::WORK);
      else
       std::cout <<"Unknown phone type. Using default." <<std::endl;
     }
    }

    void ListPeople(const tutorial::AddressBook& addressbook)
    {
     for (int i = 0; i <addressbook.person_size(); i++)
     {
      const tutorial::Person& person = addressbook.person(i);
      std::cout <<"Person ID: " <<person.id() <<std::endl;
      std::cout <<"Name: " <<person.name() <<std::endl;
      if (person.has_email())
       std::cout <<"Email: " <<person.email() <<std::endl;

      for (int j = 0; j <person.phone_size(); j++)
      {
       const tutorial::Person::PhoneNumber& phonenum = person.phone(j);
       switch (phonenum.type())
       {
       case tutorial::Person::MOBILE:
        std::cout <<"Mobile phone #: ";
        break;
       case tutorial::Person::HOME:
        std::cout <<"Home phone #: ";
        break;
       case tutorial::Person::WORK:
        std::cout <<"Work phone #: ";
        break;
       }
       std::cout <<phonenum.number() <<std::endl;
      }
     }
    }

    int AddPerson()
    {
     tutorial::AddressBook addressbook;
     const std::string& filename = "addressbook";
     std::fstream input(filename.c_str(), ios::in | ios::binary);
     if (!input)
      std::cout <<filename <<": File not found. Creating a new file." <<std::endl;
     else if (!addressbook.ParseFromIstream(&input))
     {
      std::cerr <<"Failed to parse address book." <<std::endl;
      return -1;
     }
     PromptForAddress(addressbook.add_person());
     std::fstream output(filename.c_str(), ios::out | ios::trunc | ios::binary);
     if (!addressbook.SerializeToOstream(&output))
     {
      std::cerr <<"Failed to write address book." <<std::endl;
      return -1;
     }
     return 0;
    }

    int ViewPerson()
    {
     tutorial::AddressBook addressbook;
     const std::string& filename = "addressbook";
     std::fstream input(filename.c_str(), ios::in | ios::binary);
     if (!addressbook.ParseFromIstream(&input))
     {
      std::cerr <<"Failed to parse address book." <<std::endl;
      return -1;
     }
     ListPeople(addressbook);
     return 0;
    }

    注意:编译库的时候是使用的debug非release。。。

    把工程设置成:C C++;代码生成;多线程DLL(/MD)才行。

  • 相关阅读:
    单片机控制蜂鸣器和弦音发音程序
    Ajax发送Post请求
    加壳学习笔记(一)-基础知识
    每日一小练——等值数目
    NTP配置实践
    由查找session IP 展开---函数、触发器、包
    单片机第13课:串口通信---向计算机发送数据
    [think in java]知识点学习
    【插件开发】—— 8 IPreferenceStore,插件的键/值存储!
    【插件开发】—— 7 SWT布局详解,不能再详细了!
  • 原文地址:https://www.cnblogs.com/kex1n/p/2286426.html
Copyright © 2011-2022 走看看