web-dev-qa-db-ja.com

新しいC ++プロジェクトにATL、MFC、Win32、またはCLRを使用するかどうかを決定するにはどうすればよいですか?

私は最初のC++プロジェクトを開始したばかりです。 Visual Studio 2008 を使用しています。いくつかのデータベースにアクセスし、WebSphere MQトランザクションを開始する単一フォームのWindowsアプリケーションです。私は基本的に、ATL、MFC、Win32(実際にはその点で少し曖昧です)とCLRの違いを理解していますが、どのように選択すべきか迷っています。

下位互換性のために、これらの1つ以上がありますか?

CLR 悪いアイデア

どんな提案も感謝します。

編集:このプロジェクトにはC++を選択しました。これは、この記事で説明しなかった理由で、完全に技術的ではありません。したがって、assumingC++が唯一の/最良のオプションであるため、どちらを選択すればよいですか?

66
John M Gant

それはあなたのニーズ次第です。

CLRを使用すると、実行時に.NETフレームワークをインストールする必要があることを実行可能ファイルに制限し、Windowsプラットフォームに制限する代わりに、最も表現力豊かなライブラリセット(.NETフレームワーク全体)を提供します(ただし、リストされている4つのテクノロジーはすべてWindowsのみであるため、プラットフォームの制限はおそらく最も面倒ではありません)。

ただし、CLRではC++言語のC++/CLI拡張機能を使用する必要があるため、本質的に、これを使用するには追加の言語機能を学習する必要があります。これにより、.netライブラリへのアクセス、完全なガベージコレクションなど、多くの「エクストラ」が得られます。

ATLとMFCはどちらを選択するかがやや複雑です。 MSDNの選択ページ を参照して、それらを決定します。 ATL/MFCの良いところは、.NETフレームワークが不要で、VC/MFCランタイムのみが展開用にインストールされることです。

Win32を直接使用すると、最小の依存関係で最小の実行可能ファイルが提供されますが、作成するのがより多くの作業になります。ヘルパーライブラリの数が最も少ないため、より多くのコードを記述しています。

67
Reed Copsey

Win32は、生の、ベアメタルの方法です。退屈で使いにくく、覚えておく必要のある細かい部分がたくさんあります。さもないと、物事が比較的不可解な方法で失敗します。

MFCはWin32上に構築され、アプリケーションを構築するオブジェクト指向の方法を提供します。これはWin32の代わりではなく、拡張機能です。多くの苦労をします。

System.Windows.Forms(私があなたがCLRによって意味したと仮定するもの)は完全に異なりますが、基本構造からMFCと大きな類似点があります。使用するのがはるかに簡単ですが、.NETフレームワークが必要です。これは、場合によっては障害になる場合もあれば、そうでない場合もあります。

私の推奨事項:.NETを回避する必要がある場合はMFCを使用し、そうでない場合は.NETを使用します(実際、その場合、C#を使用する方がはるかに簡単です。).

21
arke

C++に関する限り、WTLを使用します。これは軽量であり、依存関係は(もしあれば)ほとんどなく、出荷とインストールが簡単になります。私のアプリが、ほとんどのバージョンのWindowsで実行される単一のEXEで構成されている場合、非常に満足のいくものですが、これは心配する必要はありません。

代わりに.NETを使用することを選択した場合、C#がほぼ確実に使用されます。

WTLの詳細はこちら:

http://www.codeproject.com/KB/wtl/wtl4mfc1.aspx

13
Rob

なぜC++でこれを行うのか、とても興味があります。あなたの簡単な説明に基づいて、C#はより適切な選択のように聞こえます。

少し詳しく説明するために、C++ CLRについて説明したリンクを見てください。私の意見では、C++は「カーネル、ゲーム、高性能、サーバーアプリ」に適しているという最高評価の回答ノートです。どれもあなたがしていることを説明していないようです。

MFC、ATLなどは、Visual Studioの将来のバージョンでアプリをコンパイルし、Windowsの将来のバージョンで実行できるという意味でサポートされます。ただし、CLRやC#と同じようにAPIや言語で多くの新しい開発が行われていないという意味ではサポートされていません。

8
Clyde

CLRに問題はありません。ここで他の人と同じように私はC#をお勧めしますが、C++に固執する理由があるので、.NETフレームワークを使用することは、それらにまだ慣れていない場合(IMO)ATL/MFCをいじるよりも数千倍簡単です。

C++/CLRを使用している場合、実際にはC++をまったく使用していないことに言及する価値があります。 C++/CLRは、C#と同様にCILにコンパイルされます。私は自分で使ったことはありませんが、その目的は、古いコードを古いC++実行可能ファイルで動作させるのではなく、レガシーコードをコンパイルし、新しい.NETコードで簡単に利用できるようにすることです。 .NETからネイティブコードを呼び出す方法は他にもありますが、おそらくあなたは探るべきです。

4
Patrick