5

まず、いくつかの背景:

複数のプラットフォーム (Windows、iOS、OSX、Linux、Android) で動作するようにゼロから設計された新しいプロジェクトを開始することにしました。私のバックグラウンドはほとんどが C++ であるため、C++11 を使用してコア機能を作成するつもりです。そうは言っても、各プラットフォームでは、C++ コアと相互運用できるプラットフォーム固有の UI を作成する必要があります。

私が対象としている最初のプラットフォームは Windows (2 つ目は iOS) です。SQLite データベースに格納されたデータと、WPF DataGrid を使用して入力されるユーザー指定のデータ (行の挿入、既存のデータの操作など) があります。WPF を使用するのはこれが初めてで (Windows フォームを使用したことはあります)、管理された環境で C++ を使用するのは初めてです。これを MVC スタイルのアーキテクチャにする予定なので、SQLite はモデル、WPF はビュー、C++ コードはコントローラーです。

私の質問はこれです:

C++ インターフェイスからデータを取得し、C++ コード自体を破壊/マングリングせずに C# と WPF を使用して表示する方法を示す例はありますか (複数のプラットフォームで動作する必要があるため)。P/Invoke (退屈だが機能する) と混合アセンブリ (機能するが、私の C++ を台無しにするか?) について少し読んだことがありますが、Google は具体的な例 (特に WPF コントロールの設定を含むもの) に関しては役に立ちませんでしたC++ DLL 経由で取得したデータを使用)。

ありがとう!

編集: この問題へのアプローチを探しているときに、CXI に出会いました。私はそれにあまり慣れていませんが、私の問題に対する簡単な解決策のようです。何かご意見は?これらすべての概念に対する私の理解は限られています。

4

1 に答える 1

3

XAML と WinForms の両方を扱ってきたので、WPF が WinForms のエクスペリエンスよりもはるかに "ネイティブ" に感じられるとは思わないでしょう。どちらの場合も、すべてが .Net によって抽象化されます。しかし、WPF を学習したい場合は、それを行ってください。

P\invoke は、COM と同様に正常に動作します。C++ から他の言語にデータを取得する他の方法については、言語の問題ではなく IPC の問題としてアプローチすることを検討してください。1 つのプロセスを他のプロセスの子として実行し、0mq / clrzmq ( iPhone の 0mq については this を参照- Androidの場合は this ) やThriftなどのソケットとライブラリを調べて、C++ が他のプロセスと通信できるようにします。

sockets/0mq を使用すると、xml/json/ Protobuf / Protobuf-netを使用して、ある言語から別の言語にオブジェクトをシリアル化および逆シリアル化できます。Protobuf を使用すると、json 風のデータ オブジェクトのセットを 1 つ作成し、言語固有のツールを使用してコードを生成するだけで済みます。これにより、プラットフォームや言語を超えてデータ オブジェクトが処理され、楽しいことに集中できるようになります。シリアライゼーションは、SQL でもうまく機能します。これらのテクノロジはすべて実装が簡単で、それぞれに多数の言語実装が含まれているため、次の GUI に簡単に接続できます。

例に関しては、ランタイム間でデータを移動する方法にすべて依存します。

于 2012-07-03T04:45:39.700 に答える