7

C# では、protobuf-net から取得する .proto に名前空間があり、名前空間は取得されません。したがって、問題は、protobuf-net で名前空間/パッケージを含む .proto ファイルを生成 (および内部で使用) する方法です。

すべてのプロジェクトを解析して .proto ファイルを作成し、C++ アプリを C# アプリに接続した例

enum AnimationCode {
   None = 0;
   Idle = 1;
   //...
}

enum SessionCode {
   None = 0;
   //...
}

その統合プロジェクトの .proto ファイルを protogen コンパイラに渡したところ、大量のファイルが得られました。

列挙型「SessionStateCode」には、「None」という名前の値がありません。

列挙値は C++ スコープ規則を使用することに注意してください。つまり、列挙値はその型の子ではなく兄弟です。

C++ コードはありません。

ポイントは、エンコードされた C# メッセージが少なくとも C++ から読み取れるようにすることでした。

4

2 に答える 2

2

現在、protobuf-net 内に自動名前衝突修正を実行するコードはありませんが、何か提案があれば知りたいです。別のオプションは次のとおりです。

    enum AnimationCode {
        [ProtoEnum(Name="AnimationCode_None")]
        None = 0,
        Idle = 1
    }

ここで、.proto はAnimationCode_None生成時に scema を使用します。実際には、次のようになります。

enum AnimationCode {
   AnimationCode_None = 0;
   Idle = 1;
}

MetaType/ APIを確認しましたが、現在、実行時にValueMemberを設定するのは難しいようです.Nameが、新しいリリースで簡単に修正できます (この同様の enum/ MetaTypefixのように)。属性で装飾するのではなく、ランタイム。

于 2012-12-10T14:56:54.430 に答える
0

これを試しましたか?

package MyNamespace{
    enum AnimationCode {
       None = 0;
       Idle = 1;
       //...
    }
}
于 2012-12-10T14:32:25.403 に答える