Seasons.NET

ちょっとした技術ブログです

Protocol Buffersを使おう!!(2)

Protocol Buffersを使おう!!(1) では、インストールからテストアプリの実行まで書きました。
では、次は、同梱のサンプルを実行してみましょう。
その前に準備。

1.VS2008で新規プロジェクトを作成(C++Consoleアプリを選択)
f:id:Seasons:20080710035142p:image


2.必要なファイルをコピーする
(1)でビルドする為に利用した*.slnがあるフォルダに、"extract_includes.bat"という
バッチファイルが存在します。
これを実行すると、以下のようにprotocolbufferを利用する為に必要なヘッダーファイルが
カレントディレクトリにincludeというフォルダ名でコピーされてきます。

\protobuf-2.0.0beta\vsprojects\include\google\protobuf...以下省略

これを1.で作成したプロジェクトにコピーします。
この時、"*.vcproj"のあるディレクトリにgoogleディレクトリをコピーしましょう。
なぜなら、ライブラリ利用時に参照するパスが、google/なんとかってなっているので・・・


(1)のビルドでできあがった、"*lib"も同様に、プロジェクトのあるところにコピーしておきます。
"*.dll"は、後ほどできるdebugディレクトリにコピーしておきましょう。


3.サンプルデータ定義(proto)をビルドする
今回使うサンプルは、\protobuf-2.0.0beta\examplesに収録されているのですが、
このままでは、ソースが足りません!!

そこで使うのが、(1)でビルドしたprotoc.exe。

使い方は、\protobuf-2.0.0beta\examplesで以下のように実行

protoc.exe --cpp_out=. addressbook.proto

これでカレントに、

addressbook.pb.cc
addressbook.pb.h

が生成されます。
作成したら、いかのようにプロジェクトに追加しておきましょう。
そのとき

list_people.cc
add_person.cc

も忘れずに!!
f:id:Seasons:20080710040647p:image


4.プロジェクトの設定
あと、重要な設定として、プロジェクトのビルド設定があります。
まず、include検索ディレクトリに"."を追加
f:id:Seasons:20080710040645p:image

文字コードは、Not Set(ユニコード使わない)を選びます。
f:id:Seasons:20080710040646p:image

あとは、プリプロセッサで出力されるexeが、ReadとWriteの2種類を作りたいので、
__GOOGLE_PROCBUF_READ,__GOOGLE_PROCBUF_WRITEを設定してます。
詳しくは、ビルドの構成を参考に。


今回、コピーしたlibprotobuf.lib,libprotoc.libは、以下のようにソースに埋めてます。

#pragma comment(lib,"libprotobuf.lib")
#pragma comment(lib,"libprotoc.lib")

あとは、ビルドの構成を選んで、Writeで作るかReadで作るか選んで下さい。
そうすると、それぞれのexeが作成されます。


5.実行してみる
作成したwrite版のexeは、以下のように

addressbookw.exe DB

DBというデータを作成してデータを保存するように使います。
このとき出てくる質問に答えて適当なデータを保存します。

それを行ったら、今度は、read版のexeを実行して、
保存されたデータが表示されるかみてみましょう。


今回説明に使ったサンプルは、ここから落とせます。