2017-09-05 9 views
0

C/C++アプリケーションからUDP経由でデータを受信して​​います。このアプリケーションは、クラスのmemcpyをバッファに入れて、それを私たちの方法で投げています。私たちのアプリケーションはC#で書かれており、何とかデータを理解する必要があります。構造体のヘッダファイルにアクセスできます。すべては基本的に構造体または列挙型です。データの形式を変更することはできず、ヘッダーファイルはかなり頻繁に変更される可能性があります。C#で使用するUDPを介したC++クラスですが、どのようなオプションがありますか?

私は、データを受け取るためにC++で通信クラスを書き直した後、シリアル化をより詳細に制御することを考えましたが、それは長い時間がかかり、C++は錆びていますC++スレッディングに関する多くの経験が必要です。

C#でアクセスするために用意されたヘッダーファイルを使用して、いくつかのプロトタイプのC++ライブラリを作成しましたが、実際にC#自体のクラスの実際のインスタンスを実際に作成して使用する方法について、私が調べるたびに、私が見るのは外部関数の呼び出しではなく、外部関数の呼び出しです)。

私もマーシャルを調べました。しかし、データが頻繁に変更される可能性があるので、これは最後の手段であり、かなり手作業であると感じています。

この問題に関して、任意のオプションを知っている人はいませんか?

+1

*「クラスのmemcpy」はどのように見えますか?それはメタ情報を含んでいますか、それとして使用できるものは何ですか? – Sinatr

+0

オブジェクトをカスタム形式で返すアンマネージdllの関数を呼び出す場合は、C#でこの形式/オブジェクトを再構築し(たとえばstructとして)、オブジェクトをその中にキャストする必要があります。 – Noren

+0

悲しいことに、メタデータはありません。 – user3103055

答えて

0

Googleプロトコルバッファをそれぞれの端に使用しないようにしましょう(つまり、C++とc#)。あなたはあなたのC++の定義を取って、あなたにすべてのシリアル化をPBにさせるでしょう。

プロトコルバッファは、構造化されたデータをシリアル化するための、Googleの言語に依存しない、プラットフォームに依存しない、拡張可能なメカニズムです。XMLは小さく、高速でシンプルです。データを一度に構造化する方法を定義してから、特別に生成されたソースコードを使用して、様々なデータストリームとさまざまな言語を使用して構造化データを簡単に書き込んで読み込むことができます。 more...

プリミティブ型の会話が通常問題になる場合でも、さまざまなOSで機能します。

+0

ありがとう、私は将来の参照のためにこれを詳しく見ていきますが、データを送信するC++プロセスは変更できず、データは私のデバイス以外にブロードキャストされるため、すべてのクライアントでコードを変更する必要があります。これは現時点では不可能です。他のすべてのクライアントはC++であり、単純にmemcpyできます。 – user3103055

+0

@ user3103055 [OK]をクリックします。マーシャリングはおそらくあなたが手作業で作るか、C++の構造体からC#定義を自動生成するツールを書くかにかかわらず、おそらくあなたの最善の策でしょう。 – MickyD

関連する問題