4

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: プロトコル メッセージに無効なタグ (ゼロ) が含まれていました。

ヒントはありますか?

前もって感謝します。

4

2 に答える 2

0

Qt Jambi を試すことができます。「[...]さらに、Qt Jambi は、C++ プログラマーが Qt Jambi ジェネレーターを提供することで、Qt コードを Java と簡単に統合できるようにもします。」

http://qt-jambi.org/

于 2012-12-12T11:51:39.680 に答える
0

Linux システムでは、gobjectsまたはDBUS (Windows ポートもある) の使用を検討することもできます。

于 2012-12-12T13:07:40.763 に答える