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

StackOverflow https://stackoverflow.com/questions/821676

  •  03-07-2019
  •  | 
  •  

質問

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

これらの1つまたは複数は、後方互換性のためだけにありますか?

CLRは悪いアイデアですか?

ご意見をお寄せください。

編集: このプロジェクトにC ++を選択したのは、投稿で説明しなかった理由です。完全に技術的ではありません。したがって、C ++が唯一の/最良のオプションであると仮定して、想定、どちらを選択すべきですか?

役に立ちましたか?

解決

それはあなたのニーズに依存します。

CLRを使用すると、実行時に.NETフレームワークをインストールする必要があることを制限するだけでなく、最も表現力豊かなライブラリセット(.NETフレームワーク全体)が提供されます。 Windowsプラットフォーム(ただし、リストされている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を使用します。

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

代わりに.NETへの移行を選択した場合、C#がほぼ確実に移行する方法です。

WTLの詳細はこちら:

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

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からネイティブコードを呼び出す方法は他にもありますが、おそらくこれを検討する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top