6

Mac OS X と Linux でリッチ クライアント ソフトウェアを開発しています。アプリケーションを Windows に移植したいと考えていますが、Microsoft 製品のユーザーではありません。一般的に Windows にあまり詳しくありません。

私がよく知っていること:

Mac OS X では、Cocoa と Objective C、または Carbon と C/C++ のオプションがあります。Linux では、GTK+ と C/C++ または Qt と C++ のオプションがあります。Mac OS X では Cocoa を、Linux では GTK+ を好みます。Cocoa 用の Interface Builder と GTK+ 用の Glade は私の生活を楽にしてくれます。これらのオペレーティング システムでリッチ クライアントを作成するのは楽しいことです。

私のコア クラス (MVC の「モデル」) は、クロスプラットフォームの C++ で記述されています。ユーザー インターフェイス クラス、または MVC の「ビューとコントローラー」は、それぞれのプラットフォームの「優先」言語と GUI API で記述されています。

C++ は私が最もよく知っている言語です。Boost ライブラリを広く使用しています。特にスマート ポインター、スレッド、および asio ネットワーク ライブラリ。Unicode、ローカリゼーションなどについては、International Components for Unicode (ICU) を使用します。

質問 1: クロスプラットフォーム モデル クラスと互換性のある Windows プラットフォーム用の "優先" 言語と GUI API は何ですか?

質問 2: クロスプラットフォーム モデル クラスにアクセスするにはどうすればよいですか?

たとえば、Mac OS X では、コントローラー クラスを介してモデル クラスにアクセスします。コントローラー クラスは、Objective-C++ で実装されます。Objective-C++ は、C++ と Objective-C を組み合わせたものです。ビュー オブジェクトは、Objective-C のコントローラー オブジェクトと "対話" し、コントローラー オブジェクトは C++ のモデル オブジェクトと "対話" します。

Linux では、すべてのクラスが C++ で実装されています。

4

6 に答える 6

4

Windows には、実際には "優先" 言語と API はありません。むしろ、多くの選択肢があります。明らかなものは、オペレーティング システムへの生の Win32 呼び出し (つまり、実際には C 呼び出しのみ)、またはその上にある薄い抽象化 (たとえば、WTL、C++ である Windows テンプレート ライブラリ)、またはより厚い抽象化 (たとえば、MFC も) です。 C++)。

最近の Microsoft は WPF をかなり強く推し進めていますが、それはマネージド .NET の世界の一部です。その中に C++ を書くことができるので、アプリケーションを移植できるかもしれませんが、かなりの労力がかかると思います。

Linux で GTK+ または QT を使用していることを考えると、明らかなことは、両方が存在するため、Windows で両方を使用することを検討することです。そうすれば、Linux と Windows のバージョンをほぼ同一に保つことができます。もともと Windows の世界から来たものではないため、Windows 専用アプリケーションの自然な選択ではありませんが、あなたのバックグラウンドを考えると、非常に理にかなっています。Windows アプリケーションのルック アンド フィールを適切なものにするために、時間をかけて微調整する必要があるかもしれませんが、まったく新しいプレゼンテーション レイヤーを作成する必要がないため、それは十分に補われます。

于 2008-11-12T14:49:16.243 に答える
4

Qt は Windows で正常に動作します。さらに、プラットフォームに依存しません。

于 2008-11-12T16:09:19.687 に答える
2

C++ を (gcc や mingw ではなく) Visual Studio ツールチェーンでコンパイルできる場合は、.lib を作成し、それを C++/CLI アセンブリにリンクして、マネージ API を図書館。

次に、C# と WinForms API または WPF を使用して、非常にリッチでネイティブな Windows のようなアプリを作成できます。この作業は非常に簡単で、GUI を書き直す意思がある場合は、最良の結果が得られ、展開が最も簡単になります。

1 つの注意点は、.NET が存在しない可能性のあるマシンで動作させる必要がある場合です。その場合、私は .NET 2.0 (および WinForms) に固執します。また、インストーラーにそれを検出してインストールさせる必要があります。.NET 3.5 が存在しない場合にインストールする場合は、WPF を選択してください。

于 2008-11-12T14:47:46.263 に答える
1

GTK+ は Windows で問題なく動作します。あなたがすでにそれに精通しているなら、それは私が使うものです. パフォーマンスは、MFC などのネイティブ Windows UI ライブラリのパフォーマンスとおそらく一致しませんが、アプリケーションが実際に UI パフォーマンスに依存しない限り、十分に優れています。すべてのプラットフォームで GTK+ を使用する大きな例の 1 つはPidginです。

コードを見ずに2番目の質問に実際に答えることはできませんが、他のプラットフォームでのモデル - ビュー - コントローラーのアプローチとなぜ異なるのかわかりません。

于 2008-11-12T14:40:00.523 に答える
1

Windows Presentation Foundation (WPF) は、Windows 向けの新しい Microsoft リッチ アプリ標準です。あなたの C++ はそれに移植されますが、ほとんどの人はそれに対して C# を開発します。

于 2008-11-12T14:44:25.600 に答える
0

私は Windows Presentation Foundation に傾倒しています。これは、Mac OS X 上の Cocoa に対する Microsoft の答えだと思います。「多数のアプリケーション サービスを統合することを目的としています。ユーザー インターフェイス、2D および 3D 描画、固定ドキュメントと適応ドキュメント、高度なタイポグラフィ、ベクター グラフィックス、ラスター グラフィックス、アニメーション、データ バインディング。 、オーディオとビデオ。」それは私にはココアのように聞こえます:-)

実装は私の Mac OS X 実装に似ていると思います。

  • モデル: クロスプラットフォーム C++ クラス
  • 表示: WPF と C#
  • コントローラー: C++/CLI など

一方、Mac OS X では、ビュー クラスは Objective-C で実装され、コントローラ クラスは Objective-C++ で実装されます。ビュー オブジェクトは、Objective-C のコントローラー オブジェクトと "対話" し、コントローラー オブジェクトは C++ のモデル オブジェクトと "対話" します。

Windows 上の C++/CLI は Mac OS X 上の Objective-C++ のようなものですか、それとも私が定義した C# クラスは C++/CLI ではアクセスできませんか?

マネージド .Net 言語から C++ クラスにアクセスするための "正しい" または "推奨される" 方法は何ですか?

于 2008-11-12T17:09:52.763 に答える