2009-06-20 47 views
21

私は、.NETライブラリやツールを使用して開発またはデプロイする予定のないC++プロジェクトに取り組んでいます。つまり、Visual Studioを使用して作成することは意味がありますStudio Win32コンソールアプリケーション。しかし、私は、Visual Studioの下でCLRアプリケーションを使用する際のデバッグ能力がはるかに強力であると聞いてきました。だから私はいくつかの質問を持っている:Win32コンソールアプリケーション対CLRコンソールアプリケーション

  1. はそれは、Win32アプリ対CLRアプリを持つことは、あなたが任意の.NETライブラリや他のリソースを利用しない場合でも、開発プロセスに機能を追加するというのは本当でしょうか?

  2. もしそうなら、私はSTLなどを使って純粋なC++プロジェクトを開発していても、それを利用していないにもかかわらず、プロジェクトをCLRプロジェクトとして開発/コンパイルすることはできますか? .NETの機能性?あるいは、そのようなプロジェクトには、元に戻すことは自明ではない基本的な違いが必要なのでしょう。つまり、Win32コンソールアプリケーションに固執すべきですか?

答えて

25

最終的には、アプリケーションでCLRや.NETオブジェクトを使用するつもりがない場合は、通常のWin32 C++ライブラリを使用してください。他に何かをすると、あなたは痛みを引き起こします。

ここで、デバッグについての最初の質問に答えるために、CLRでのデバッグは、通常のC++アプリケーションのデバッグに比べていくつかの利点があります。 Visual Studio 2005からは、C#とVB.Netの両方で、locals/autos/watchウィンドウの変数表示をもっと重要なものにすることに重点を置くようになりました。これは主に、DebuggerDisplay、DebuggerTypeProxy、Visualizerフレームワークなどの.Net属性の導入によって行われました。

ただし、.Netタイプを使用しない場合は、これらの利点はありません。

C++式評価ツールでは、これらの機能を利用していません。それはタイプ表示をカスタマイズする独自の方法を持っています。しかし、それは、コードがdebugeeプロセスで実行されることを許さないため、属性スタイルと同じ特徴(または潜在的に危険なもの)ではありません。

これは言うまでもないことですが、C++のデバッグはあまり経験がありません。これは単に異なるものであり、多くのSTLコンテナタイプに適した表示があります。

CLRアプリケーションのデバッグにもいくつかの欠点があります。たとえば、JITerがローカル変数、パラメータ、および多くの場合「this」を隠すため、最適化されたコードのデバッグはほとんど不可能です。同様に構築されたC++アプリケーションをデバッグすることは、イライラするかもしれませんが、あなたはいつもレジスタをつかんで、何が起こっているか見ることはできません。 CLRアプリケーションでも同じことをするのは難しいです。

+0

詳細な回答をいただきありがとうございます。 最初の声明でちょっと説明し、そのような設定が長期間にどのような問題に直面するかも説明できますか?それは主に誤って.NETオブジェクト/機能を使用して、ちょうどうまくコンパイルしてから、後でアプリケーションに深く埋め込まれたコードのこれらの部分を変更する必要がありますか? – bsofman

+0

@bsofman、本質的にはい。 CLRを利用してCLRを使用せずに展開するには、2つのビルド構成(それぞれに1つずつ)が必要です。言語間の違いは、1つの設定のビルドエラーで表示されますが、他の設定では表示されず、むしろ厄介なものになります。 – JaredPar

2

ネイティブのC++コードをCLRにコンパイルすると、ワームが蔓延することがあります。既存のC++コードに多額の投資があり、マネージドタイプでコードを実行する必要がある場合を除き、これは避けたいものです。

たとえば、C++/CLIは、ネイティブのC++コードをCLRアセンブリにすぐにバンドルする方法の1つですが、C++言語に非標準の構文が追加されています。最低限のことを言うには難しい問題です。

結論として、私はそれをネイティブアプリとしてそのまま使用します。 CLRに移植する予定があり、このプロジェクトの作業を開始したばかりの方は、C#のようなCLRネイティブ言語で書くことを真剣に考えていきます。

+0

C++ CLIは怖いです! – toto

1

ここからコピーこの回答 - http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b-fda1e5e576eb/whats-the-difference-between-clr-console-application-and-win32-console-application

CLRコンソールアプリケーションとWin32コンソールアプリケーションの違いは何ですか? - 前者はCommon Language Runtime(つまり、.NETフレームワーク)を使用しています。後者はそうではない。

と私はwin32コンソールアプリケーションモデルでnamespace Systemを使用できません。 - システム名前空間は.NET Frameworkの一部です。

名前空間を使用するにはどうすればよいですか? - .NETアプリケーションを作成する必要があります。

C#モデルなどの入力ヒントはありませんか? - Visual Studioの既存のバージョンには、C++/CLI用IntelliSenseはありません。 .NETアプリケーションが必要な場合は、C#がより良い言語選択になるかもしれません。

関連する問題