2012-03-09 8 views
4

Webカメラの画像をリアルタイムで同じPCのC#アプリケーションに送る必要があるC++アプリケーションがあります。 C++コードはC#コードから呼び出すことができないので、画像を送るために名前付きパイプ経由で通信を実装する必要があります。Windowsで名前付きパイプを使って作業する(C++/C#)

私は以前に通信プログラミングをしていませんでした。この問題にどう対処するのかと思いました。

私の最初の考えは、別のスレッドで名前付きパイプサーバーを作成し、作成後にイメージが送信可能になるまでスレッドが継続的に待機することでした。その時点で、それは画像を送るでしょう。

同様に、C#アプリケーションはクライアントとして機能する新しいスレッドを作成します。それはサーバに接続し、画像が利用可能になるまで連続的にループします。その時点で、イメージを受け取り、メインスレッドがアクセスできるキューに格納します。

これは意味がありますか?これが最善のアプローチですか?

+1

良い質問ですが、プログラマーズに所属していると思います.stackexchange.com。これは、典型的にここに属するものより概念的です。 – NotMe

+0

これらのイメージを永続的に保存する必要がある場合、メモリマップされたファイルがおそらくより良いアプローチになります。 – Flot2011

+0

C++アプリケーションの各フレームでは、名前付きメモリマップファイルに画像全体を格納し、C#アプリケーションから読み取ることができます。上記のようにメモリマップファイルへの読み書きを処理するために、それぞれの側に新しいスレッドを作成する必要がありますか? – Jkh2

答えて

0

私はここでCOMを使用するという概念を2番目に挙げています。私はCOMオブジェクトをC#で書くつもりですが、それは簡単です(C++よりも)。 C#は優れたCOM相互運用性を備えています。 http://msdn.microsoft.com/en-us/library/aa645712%28v=vs.71%29.aspxを参照してください。私はPython(私たちのビルドシステム)が呼び出し可能なwork-like MS VSS COMインターフェイスを書いて、別のベンダーが公開しているC#.NETインターフェイスとのインターフェイスをとりました。それはCOMが低かったので、JScript、C++などから呼び出すこともできました。

マシン間やWindowsのセキュリティが必要な場合を除き、名前付きパイプは避けてください。実際にあなたのオブジェクトを横切って輸送するのに使用されるものは何でもかまいませんが、恐らくサイズ/速度に左右されます。

関連する問題