問題タブ [protocol-buffers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 同じ protobuf メッセージを複数の DLL に静的にリンクして、これらの DLL を連携させることはできますか?
google protobufs を使用して、ネットワーク上でデータを渡します。サーバー側はプラグインに似ているため、protobuf メッセージを処理するモジュールのいくつかは DLL です。一部の DLL は他の DLL に依存し、他の DLL のメッセージを使用して独自のメッセージを定義します。
したがって、A.DLL には、メッセージ クラスa.proto
で生成されるものがあります。protoc コンパイラで文書化されていないオプションを使用すると、メッセージ クラスが DLL エクスポートとして宣言されます。a.pb.h/cc
MsgA
dllexport_decl
ここで、B.DLL は A.DLL に依存し、b.proto
次のようになります。
最後に、パーツをまとめる実行可能ファイルもメッセージに依存しますMsgA
。protobuf ライブラリも DLL としてビルドされ、すべてにリンクされています。それはすべてビルドして実行します。
しかし、光の勢力がDLL 配布の削減を要求しています! そこで、モジュール A (これは、他の多くのプラグイン DLL が使用するメッセージと小さなユーティリティの単なるコレクションです) を、DLL ではなくスタティック ライブラリとして構築しました。B.DLL と実行可能ファイルの両方が A にリンクしており、これまでのところすべて問題ありません。
A は静的にリンクMsgA
されているため、すべての DLL と EXE で完全に定義されます。生成された C++ コードの静的データはすべて const であるため、これで問題ありません。では、最終プロセスで複数のコピーが存在する場合はどうなるでしょうか。すべてのコピーは同一です。
しかし、新しく構築したプロセスを実行すると、libproto は実際に役立つ例外をスローします。MsgA のファイル ID は記述子マップ(またはそのようなもの) に既に存在します。つまり、 の定義が複数あることがMsgA
大きな問題です。
最後に、ここに質問があります。
- libproto を DLL として使用する代わりに静的にリンクした場合、エラーは解消されますか?
MsgA
複数の の定義がDLL 全体に散らばっていても本当に安全ですか?
最初のポイントは、protobuf ライブラリの再構築に取りかかれば、おそらく数日で答えられると思いますが、2 番目のポイントは、私の現在の知識を少し超えています。また、proto libs を再コンパイルする手間を省くことができる、迅速なアップまたはダウンの回答を得たいと考えています。
java - Javaのプロトコルバッファ区切りI/O関数に相当するC++はありますか?
C++とJavaの両方でファイルから複数のProtocolBuffersメッセージを読み書きしようとしています。Googleはメッセージの前に長さのプレフィックスを書くことを提案していますが、デフォルトではそれを行う方法はありません(私が見ることができます)。
ただし、バージョン2.1.0のJava APIは、明らかにその仕事をする一連の「区切られた」I/O関数を受け取りました。
C ++に相当するものはありますか?そうでない場合は、Java APIが付加するサイズプレフィックスのワイヤー形式は何ですか?C ++でそれらのメッセージを解析できますか?
アップデート:
これらは現在google/protobuf/util/delimited_message_util.h
、v3.3.0の時点で存在しています。
c# - Windows MobileからC#オブジェクトをhttpストリームに送信する方法
シナリオ:Windows Mobile C#CompactFramework2.0または3.5Protobufオブジェクト
オブジェクトをhttpurl(投稿)に送信する必要があります。その後、応答を待ち、オブジェクトの変更されたバージョンを受け取ります。httpストリームに接続し、シリアル化されたオブジェクトを渡す方法について何か入力はありますか?
.net - Protobuf-net - .NET GUID のシリアル化 - C++ でこれを読み取る方法は?
.NET アプリケーションで Protobuf-net を使用して比較的簡単にオブジェクトをシリアル化しました。GetProto() コマンドを使用して、protobuf-net が生成した .proto ファイルも取得します。
.NET で生成された .proto ファイルで、GUID フィールドは「bcl.guid」のタイプを取得します。
ここで、.proto ファイルを C++ でコンパイルして、データを逆シリアル化できるようにします。
ただし、C++ protoc.exe コンパイラは bcl.guid の解釈方法を認識せず、「VideoAudioStructs.proto:11:13: "Guid" is not defined.」というエラー メッセージをスローします。これをどうすればいいですか?
django - django: リモート サービスを呼び出すと Python が強制終了される
リモートサービスと通信するdjangoアプリを作成しています(VPN上でローカルにホストされていません)。django シェル経由でサービスと正常に通信できますが、まったく同じ関数を呼び出して Web フォームから情報を投稿しようとすると、開発サーバーが停止します。
シェルと開発サーバーはまったく同じように動作すると思っていたでしょう。私が考えることができた唯一のことは、シェルがより「忍耐強く」、応答を待っている可能性があるということでしたか?
通信はプロトコル バッファを介して行われます。
ヘルプ!
java - バイナリ ロギングにプロトコル バッファを使用する
次の理由により、バイナリログにプロトコル バッファを使用することを考えています。
- とにかくオブジェクトをエンコードする方法です
- 比較的コンパクトで、読み取り/書き込みなどが高速です。
とはいえ、API はオブジェクト全体の作成に重点を置く傾向があるため、どのように対処すべきかは明らかではありません。そのため、DataLogEntry のリストを DataLogFile の繰り返しフィールドとしてラップすることは、メッセージング用語で行うことですが、私たちが本当に望んでいるのは、DataLogEntry 全体を書き込んでから読み込んで、ファイルの末尾に追加できるようにすることです。
それを行うことで最初に遭遇した問題は、これを行うことです(テストでは:
ストリームから読み取られる DataLogEntry は 1 つだけになります。isAtEnd がなければ、停止することはありません。
考え?
編集: entry.writeDelimitedTo と BidLogEntry.parseDelimitedFrom の使用に切り替えましたが、うまくいくようです...
c# - protobuf-net - C++ 側での逆シリアル化の問題 :(
.NET アプリケーションで ProtoBuf-Net を使用して、以下をシリアル化しています: (.proto 形式)
私の目的は、これをシリアル化し、単一のサンプルとして ASF ファイルに挿入することです。
私はこれをシリアライズするために呼び出します:
次に、ms オブジェクトからバイト配列を取得します。
このバイト配列を ASF に入れます。大きな問題は、ASF サンプルを正常に読み取る C++ アプリにあります。逆シリアル化しようとすると、メモリ アクセス違反が発生します :(
これは私のC++コードです:
(ここで、m_screenBuffer は ProtoScreenBuffer、serBuffer は ASF ファイルから取得した生のバイト配列、dwInputDataLen はその長さです。)
私がやろうとしていることに対して、ここで間違っていることはありますか (C# .NET でシリアル化し、C++ で逆シリアル化しますか?)
どうもありがとう。
ローイ
c++ - .proto (プロトコルバッファ) で定義されたクラスをソケット経由で送信する方法
ソケット経由でプロトを送信しようとしていますが、セグメンテーション エラーが発生します。誰かが助けて、この例のどこが悪いのか教えてもらえますか?
file.proto
xxx.cpp
助けと返信をありがとう-
serialization - XStream <-> 代替バイナリ形式 (プロトコル バッファなど)
現在、Web サービスの入力/出力を XML でエンコードするために XStream を使用しています。ただし、複数の言語 (protobuf、Thrift、Hessian など) 用のコード ジェネレーターを使用してバイナリ形式に切り替えることを検討しています。これにより、新しいクライアントのサポートがより簡単になり、ハンド コーディングへの依存度が低くなります (また、バイナリ データを含むメッセージ形式をより適切にサポートするため)。 .
ただし、サーバー上のオブジェクトのほとんどは、XStream がリフレクションと注釈を介してシリアル化を処理する POJO であり、これらのライブラリのほとんどは、POJO 自体を生成すると想定しています。代替ライブラリに接続する方法はいくつか考えられます。
ターゲット形式の XStream マーシャラーを記述します。
代替ライブラリによって生成されたクラスとの間で POJO をマーシャリングするカスタム コードを記述します。
生成されたクラスをサブクラス化して、POJO ロジックを実装します。書き直しが必要な場合があります。(また、テラコッタを使いたいと言いましたか?)
リフレクション (XStream など) とコード生成の両方をサポートする別のライブラリを使用します。
ただし、どのシリアライゼーション ライブラリが上記の手法に最適かはわかりません。