C++ と Java の間でメッセージを交換しようとしていますが、その逆も成功しません。2 つのメッセージ (1 つは C++ から Java に送信され、もう 1 つはその逆に送信されます) をユニオン タイプで定義しました (添付の .proto を参照)。
C++ コードは次のとおりです。
operational_gui::OperationalMessage message;
message.set_type(operational_gui::OperationalMessage::OWNPOSITIONREPORT);
message.mutable_oprep()->set_latitude(38.5);
message.mutable_oprep()->set_longitude(-9.8);
message.mutable_oprep()->set_heading(25);
message.mutable_oprep()->set_validity(0);
message.SerializeToArray(buf, message.ByteSize());
m_pNamedPipeSocket->write(buf, message.ByteSize());
m_pNamedPipeSocket->flush();
Java コードは次のとおりです。
int bytes = pipe.read(buffer);
MessagesProtos.OperationalMessage message = MessagesProtos.OperationalMessage.parseFrom(buffer);
switch(message.getType()){
case OWNPOSITIONREPORT:
System.out.println("Response is OwnPositionReport");
break;
case FRIENDPOSITIONREPORT:
System.out.println("Response is FriendPositionReport");
break;
case COMMSTATUSREPORT:
System.out.println("Response is CommStatusReport");
break;
}
通信はパイプ (c++ では QLocalSocket、Java 側では FileInputStream) によって行われます。
C++ は 33 バイトを送信し、Java は例外 InvalidProtocolBufferException: プロトコル メッセージに無効なタグ (ゼロ) が含まれていました。
ヒントはありますか?
前もって感謝します。