私は最初のC++プロジェクトを開始したばかりです。 Visual Studio 2008 を使用しています。いくつかのデータベースにアクセスし、WebSphere MQトランザクションを開始する単一フォームのWindowsアプリケーションです。私は基本的に、ATL、MFC、Win32(実際にはその点で少し曖昧です)とCLRの違いを理解していますが、どのように選択すべきか迷っています。
下位互換性のために、これらの1つ以上がありますか?
CLR 悪いアイデア ?
どんな提案も感謝します。
編集:このプロジェクトにはC++を選択しました。これは、この記事で説明しなかった理由で、完全に技術的ではありません。したがって、assumingC++が唯一の/最良のオプションであるため、どちらを選択すればよいですか?
それはあなたのニーズ次第です。
CLRを使用すると、実行時に.NETフレームワークをインストールする必要があることを実行可能ファイルに制限し、Windowsプラットフォームに制限する代わりに、最も表現力豊かなライブラリセット(.NETフレームワーク全体)を提供します(ただし、リストされている4つのテクノロジーはすべてWindowsのみであるため、プラットフォームの制限はおそらく最も面倒ではありません)。
ただし、CLRではC++言語のC++/CLI拡張機能を使用する必要があるため、本質的に、これを使用するには追加の言語機能を学習する必要があります。これにより、.netライブラリへのアクセス、完全なガベージコレクションなど、多くの「エクストラ」が得られます。
ATLとMFCはどちらを選択するかがやや複雑です。 MSDNの選択ページ を参照して、それらを決定します。 ATL/MFCの良いところは、.NETフレームワークが不要で、VC/MFCランタイムのみが展開用にインストールされることです。
Win32を直接使用すると、最小の依存関係で最小の実行可能ファイルが提供されますが、作成するのがより多くの作業になります。ヘルパーライブラリの数が最も少ないため、より多くのコードを記述しています。
Win32は、生の、ベアメタルの方法です。退屈で使いにくく、覚えておく必要のある細かい部分がたくさんあります。さもないと、物事が比較的不可解な方法で失敗します。
MFCはWin32上に構築され、アプリケーションを構築するオブジェクト指向の方法を提供します。これはWin32の代わりではなく、拡張機能です。多くの苦労をします。
System.Windows.Forms(私があなたがCLRによって意味したと仮定するもの)は完全に異なりますが、基本構造からMFCと大きな類似点があります。使用するのがはるかに簡単ですが、.NETフレームワークが必要です。これは、場合によっては障害になる場合もあれば、そうでない場合もあります。
私の推奨事項:.NETを回避する必要がある場合はMFCを使用し、そうでない場合は.NETを使用します(実際、その場合、C#を使用する方がはるかに簡単です。).
C++に関する限り、WTLを使用します。これは軽量であり、依存関係は(もしあれば)ほとんどなく、出荷とインストールが簡単になります。私のアプリが、ほとんどのバージョンのWindowsで実行される単一のEXEで構成されている場合、非常に満足のいくものですが、これは心配する必要はありません。
代わりに.NETを使用することを選択した場合、C#がほぼ確実に使用されます。
WTLの詳細はこちら:
なぜC++でこれを行うのか、とても興味があります。あなたの簡単な説明に基づいて、C#はより適切な選択のように聞こえます。
少し詳しく説明するために、C++ CLRについて説明したリンクを見てください。私の意見では、C++は「カーネル、ゲーム、高性能、サーバーアプリ」に適しているという最高評価の回答ノートです。どれもあなたがしていることを説明していないようです。
MFC、ATLなどは、Visual Studioの将来のバージョンでアプリをコンパイルし、Windowsの将来のバージョンで実行できるという意味でサポートされます。ただし、CLRやC#と同じようにAPIや言語で多くの新しい開発が行われていないという意味ではサポートされていません。
CLRに問題はありません。ここで他の人と同じように私はC#をお勧めしますが、C++に固執する理由があるので、.NETフレームワークを使用することは、それらにまだ慣れていない場合(IMO)ATL/MFCをいじるよりも数千倍簡単です。
C++/CLRを使用している場合、実際にはC++をまったく使用していないことに言及する価値があります。 C++/CLRは、C#と同様にCILにコンパイルされます。私は自分で使ったことはありませんが、その目的は、古いコードを古いC++実行可能ファイルで動作させるのではなく、レガシーコードをコンパイルし、新しい.NETコードで簡単に利用できるようにすることです。 .NETからネイティブコードを呼び出す方法は他にもありますが、おそらくあなたは探るべきです。