2011-08-15 15 views
0

私はC++での作業や、CLR、Win32の、MFCなどのC++のさまざまな種類があることがわかっています....C++ CLR win32など?

以外にも、私はいくつかのC++ライブラリのタクシーは他のいくつかのC#プログラム内部で呼び出されることを発見しました。どのようにすることができますか?

C++はC#より高速ですが、C++を実行するプラットフォームが不要なため、CLRでC++を使用すると、.Netフレームワークが必要なほど遅くなりますか?

質問があります: 私はWindowsコマンドを呼び出して出力を返すC++ライブラリを作りたいと思います。このライブラリは他のC#プログラムでも呼び出すことができます。それは可能ですか?もしそうなら、C++ライブラリは.Netフレームワークを必要とし、実行速度は遅くなりますか?

答えて

5

あなたの混乱は理解できますが、あなたの理解には欠陥があります。

C++とMFCの違いはありませんが、MFCはC++で書かれた他のコードと同様に、C++で書かれたクラスフレームワークです。これは、マイクロソフトが自社製品と共に提供するフレームワークです。

C++/CLI(CLRではありません)は実際にはC++ではありません。これは、ILのバイトコードをコンパイルするC++のような言語です。それには多くの制限があり、C#やVB.NETなどの.NET言語と同じ制限があります。これはC++に非常によく似ていますが、全く同じではありません。

C++/CLIアプリケーションは、.net ILバイトコードをコンパイルするので、C#アプリケーションと変わりません。実際、.netベースの言語はほとんど同じバイトコードにコンパイルされ、同じフレームワークを使用します。

C#またはC++/CLIプログラムが "低速"であるかどうかは、あまり明確ではありません。あまりにも多くのC++の熱狂が、マネージコードが遅いという神話を永続させます。そうではありません。最初に実行する(要求に応じてコードをコンパイルする必要があります)など、速度が遅いものもありますが、.NET Jitter(ちょうど時間コンパイラ)が実行しているプラ​​ットフォームのコードを最適化できるため、より良い実行します。

もちろん、管理コードにもガベージコレクションがありますが、これは非常に便利ですが、状況によってはパフォーマンスに問題が発生する可能性があります。しかし、これはすべての状況ではなく、ほとんどの状況でさえありません。

+0

そして、ええ、私はいつもCLRとCLIを混乱させます:) –

+0

新しいプロジェクトを開くと、Visual Studioの選択肢に「CLR Empty Project」と「CLR Console Application」という名前が表示されます – user883434

+0

@ user883434 - そして?私はあなたのポイントが何であるか分かりません。異なるプロジェクトは、始める場所を与えるテンプレートに過ぎず、C++とは異なる種類ではありません。 –

2

はい、可能です。

C++/CLIを使用している場合は、アセンブリをC#プロジェクトに含めて、通常のC#コードのような関数を呼び出すことができます。非CLI C++を使用して書く場合(Win32とMFCはC++の種類ではなく、単にライブラリです)、C++のP/InvokeをC++で書かれた関数を呼び出すために使用する必要があります。

はい、C++/CLIはおそらくバニラC++よりも少し遅いことがあります。しかし、それほど多くはありません。 CLRはかなり速いです。

関連する問題