2009-07-06 15 views
4

私のアプリケーションは2つのセクションで構成されています。フロントエンドのUIであるC#の実行可能ファイルと、より低レベルのものであるC++のDLLです。私のアプリケーションは、すべてのC++オブジェクトインスタンスに対応するC#オブジェクトインスタンスが存在する多くのオブジェクトインスタンスを作成および管理します。 C#およびC++セクションのオブジェクトとそれらのオブジェクトのデータが実行時に常に同期していることを保証するために、どのような手法やライブラリを使用できますか? 1つのオブジェクトインスタンス内の1つのメンバの変更は、対応するオブジェクトインスタンスを更新する必要があります。実行時にC#とC++のクラスを同期させておく?

ありがとうございます!

編集:私は「同期」でオブジェクトを維持することによって何を意味するのかを少し明確に

+0

は、C#のオブジェクトをいインスタンスはC++オブジェクトインスタンスをカプセル化しますか?たとえば、あなたのC#オブジェクトにC++オブジェクトへのポインタが含まれているのでしょうか? –

+0

彼らは独立しています。それらは、ネットワークのような中間オブジェクトを介して通信します。 – djcouchycouch

答えて

1

問題を解決できるかどうかは明らかではありませんが、Managed C++とは考えていますか?私はC++コードをManaged C++としてコンパイルし、管理された拡張を使用して基底のC++データを直接使用する.NETクラスを作成するだけで成功しました。そうすれば、データのコピーは1つしかありません。

おそらくすべての状況に適していない(と私はその限界をテストしていない)が、かなり時間が節約されていることが分かった。 Managed C++は適切な.NET言語であるため、結果はC#側から使用するときれいでした。このようなことを試してみるときには、しばしば回避しなければならない珍しいやり方はありません。

(別の同様のアプローチは、あなたのためのラッパーを生成するために)SWIG( http://www.swig.org/を使用することです。私は使いやすく、うまく機能聞くが、私はそれを自分自身を使用していない。)

+0

こんにちは!回答ありがとうございます。残念なことに、デザインは私の手の外です。私は、現在のデザインを考慮に入れた最適なソリューションを探しています。 – djcouchycouch

+0

しかし、私はおそらくこれとちょうど同じような解決策を選ぶだろうか? – djcouchycouch

2

おそらく、コード生成がうまく機能するでしょう。例えば。これらのクラスのプロパティ/メソッドを1つの場所(多分XMLなど)に定義し、そこからC#およびC++クラスを生成します。コードを生成するためにCodeSmith(http://www.codesmithtools.com/)のようなものを使用してください。

+0

これを行うときは、生成するC#クラスが「部分的」であることを確認してください。こうすることで、UI固有のコードをC#クラスに追加する必要がある場合は、オブジェクトを再生成する必要はなく、そのようにしてもオブジェクトの再生成が妨げられることはありません。 – GWLlosa

+0

こんにちはアレックス!これらのオブジェクトがどのように同期しているべきかを正確に指定していないことに気づいたので、私は質問を更新しました。私が意味したのは、実行時にインスタンスを同期させておくことでした。ありがとう! – djcouchycouch

関連する問題