• 締切済み

VC++2008EE 2種のコンソールの違い

VisualC++入門書で学習中の者です。(VisualC++2008EE使用) Win32コンソールとCLRコンソールの2種類があり、本ではWin32コンソールのみ使用して解説してます。 構成プロパティ/全般/プロジェクトの規定値では、共通言語ランタイムサポート(/clr)になっています。これでC++/CLIに対応するいうことです。 では、この場合のWin32コンソールとCLRコンソールとで違いって何でしょうか。 標準C++の記述とC++/CLIの記述が混在したときにコンパイルでエラーになる場合があるとか、実行速度に違いが出るとかの差が生じるものでしょうか。 よろしくお願いします。

noname#157344
noname#157344

みんなの回答

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.1

>標準C++の記述とC++/CLIの記述が混在したときにコンパイルでエラーになる場合があるとか、 >実行速度に違いが出るとかの差が生じるものでしょうか。 そんなところです。 >この場合のWin32コンソールとCLRコンソールとで違いって何でしょうか。 Win32アプリケーションとは、特定のCPUに依存した CPUが直接読むことができる、マシン語に翻訳されます。 一方CLRアプリケーションとは、MS社が提供する 共通言語コンポーネントを使用するため一般的には、 中身はインタープリンタの中間言語に翻訳されます。 これが主な違いです。 CLRでは実行する際、CPUが直接命令を読むことができない為、 実行する為の環境として、.net frameworkが必要になります。 インタープリンタの中間言語を使用する為、一般に実行速度が マシン語のそれと比べて遅くなります。

noname#157344
質問者

補足

回答ありがとうございます。 質問があまりよくない書き方で趣旨がうまく伝わらなかったようです。 Win32コンソールアプリでも共通言語ランタイムサポート(/clr)対応にすると、 System::Console::WriteLine("Hello World!"); のような記述で動作するんです。 Win32コンソールアプリは中間言語経由しないという話なので、これはどうやって処理しているのだろうという疑問がありました。Win32コンソールアプリとCLRコンソールアプリで、System::Console::WriteLine("Hello World!"); のような.NET版を処理するのにどのような違いがでるのだろうなという疑問です。

関連するQ&A

  • C++/CLIと.NETって全く違う物ですか? 混乱してます

    現在C++/CLIを学習中(入り口にもたどり着いていませんが)で、Googleからいろんな所に飛んでいるのですが、いろいろ記事を見て混乱してしまいました。 ManagedC++がC++/CLIに進化したみたいですが、ManagedC++がCLR(.NET Framework)で動けるようにマネージ拡張されたC++。 C++/CLIはManagedC++が整理されたもの。 VisualC++ 2005における.NET FrameworkとC++/CLIはどういう関係があるのでしょうか? どうしてもC++/CLIと.NET Frameworkの扉が開けなくて困っています。

  • Win32 コンソールアプリケーション

    VisualC++ 2010 Express を利用して、C++を学んでいます。 Win32 コンソールアプリケーション でプロジェクトを作成しました。 最初に用意されたテンプレート(?)に、  printf("%s\n", "Hello World!"); を追加して、実行してみたのですが、「Hello World!」がどこにも表示されませんでした。 ソリューション(プロジェクト?)が保存されているフォルダへ移動して、 exe形式の実行ファイルがあったので、これを実行してみましたが、すぐに画面が消えてしまいます。 コマンドプロンプトを起動して、↑のexeを実行したところ、「Hello World!」が表示されました。 ★ いちいちこの手順を踏むのが非常に面倒なのですが、Visual C++ 内で完結できないでしょうか? 以上、よろしくお願いします。

  • VCでバッチソフト

    勉強でWindowsで動くテキストを加工するツールを作成したいのですが、 一瞬黒い画面が現れるので、 Visual C++ → Win32 → Win32コンソールアプリケーション → コンソールアプリケーション → 空のプロジェクトではなく Visual C++ → Win32 → Win32コンソールアプリケーション → Windowsアプリケーション → 空のプロジェクトで合っていますよね。 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) を宣言するのですが、引数はどうやって渡すのですか? またお勧めのVCでC言語を勉強できる本があれば教えてください。

  • VC++の ^ や -> について

    VC++ 2005を勉強中なのですが、違いが解らない為質問させていただきました。例えば、 int i = 0; MessageBox::Show(i.Tostring()); とやるのと 下の(C++/CLIというのでしょうか) int^ i = 0; MessageBox::Show(i->Tostring()); と記述するのではどのような違いがあるのでしょうか?

  • VCでストップウォッチを作りたいのですが、うまくいきません。

    こんにちは。私は30代の男性です。 「Visual C++ の初歩(http://www.gulf.or.jp/~damayan/vc/visualc2.htm)」というサイトで、ストップウォッチプロジェクトファイルがダウンロードできたので、コピペしてコンパイルしようと思ったのですが、うまくいきませんでした。 いつも下記のようなエラーメッセージが表示されます。ヘッダーファイルに「stdafx.h」は置いてあるのですが、やり方が間違っているのでしょうか? ちなみに、ダウンロードした「release」ファイルの中のexeファイルを起動すれば、実行はされます。「自分が新規でプロジェクトファイルを作り、ダウンロードしたソースをコピーしてコンパイルを試みても、うまくいかない。」という話です。 よきアドバイスを頂ければと思います。 宜しくお願い致します。 ----- ビルド開始: プロジェクト: abc, 構成: Debug Win32 ------ コンパイルしています... abc.cpp c:\documents and settings\my documents\visual studio 2005\projects\abc\abc\abc.cpp(111) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ビルドログは "file://c:\Documents and Settings\My Documents\Visual Studio 2005\Projects\abc\abc\Debug\BuildLog.htm" に保存されました。 abc - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

  • リリースビルドの作成

    VisualC++ 2005 Express Editionを使って、C言語の簡単なプログラムを作りました。コンパイルの際に出てくるエラーや警告は一切ない(デバッグモード、リリースモード両方)のですが、このリリースビルドをVC++をインストールしていないPCで実行しようとすると、「指定されたプログラムは実行できません。」と出て実行できません。コンパイルに使ったPCでは実行できます。 リリースビルドを作成の際、ツールバーにある"Debug"を"Release"に切り替えて、ソリューションをビルドしました。プロジェクトはWin32コンソールにして、空のプロジェクトから始めました。 なぜ、バイナリが実行できないのでしょうか? そもそも、リリースビルドの作成法はこれでいいのでしょうか?

  • VC++(VS)でコンソールアプリ(複数ファイルからなる)を作成したい

    マイクロソフト社のVC++(Visual Studio 2008)で コンソールアプリケーションを作成しようとしております。 ファイルは複数ファイルからなり、 mainprogram.cpp -> 実行ファイル(mainprogram.exe) subprogram1.cpp -> オブジェクトファイル(subprogram1.obj) subprogram2.cpp -> オブジェクトファイル(subprogram2.obj) ・・・以下続く のように 1)サブプログラムをobjファイルとしてコンパイル 2)メインプログラムをコンパイルしてobjファイルとリンクし、   実行ファイルを作成する というような作業を行いたいと考えております。 以前はLinuxの環境でg++、makeを利用して このような構成のコンソールアプリケーションを作成しておりました。 が、VCに移行するに当り、どのようにプロジェクトファイル等を 構成して良いか分からず、出だしでつまづいております。 VCにもコマンドラインでコンパイルする方法 (cl, nmakeを使うんでしょうか。。。)があるみたいですが、 これらの手法について書かれている 書籍、サイト等を探すことが出来ないでおります。 VCに関して、このような使用法に対する解説がなされている書籍、 もしくはサイト等をお教え願えませんでしょうか? 宜しくお願い申し上げます。

  • visual c++/c# 2005 Express Editioenについて

     最近、visual C++/C# 2005 Expressをダウンロードして、勉強しています。visual C#とvisual C++の本は買ったのですが、Visual C++.netのMFC、2005のCLRの意味が分からなくて、本を読んでも理解できません。とくにMFCが…実は、Visual C++は、.netで2002~2003年バージョンで、メニューなども違って、どう読みこなせばいいか分かりません。(Visual C++.net 入門 ビギナー編 著 林晴比古) どなたか、MFCとCLRの違い、また、この本のどの点が、VisualC++2005 Express Editionと同じなのか、教えてもらえれば、うれしいです。  よろしくお願いします。

  • LoadImage関数について(VC++)

    こんにちわ、Visal Studio 2005(C++)のフォームアプリケーションでプログラミングしているものです。LoadImage関数を使って、読み込んだ画像を指定のサイズにリサイズ?したいのですが、LoadImage関数の使い方がよくわかりません。『プログラム上で画像作成』という質問とほぼ質問内容がかぶっているのですが、そちらの回答を見て実効してもうまくいきません。 そちらで書いてあることは、たとえばピクチャーボックスに画像を表示させたい場合なのですが、 pictureBox1->Image = ::LoadImage(file/*ファイル名*/,x/*指定したx座標*/,y/*指定したy座標*/);  といった感じでできるらしいのですが、::の後にLoadImageがでてきません。これは何かこの記述をする前に、さらに記述が必要なのでしょうか? その後には、プロパティを開いて共通言語ランタイムサポートを「共通言語ランタイムサポート(/clr)」に設定すればできるとも書いてありますができません。 お分かりの方がいましたら回答お願いします。

  • 【VC++2005(CLR)】子フォームから親フォームにデータを渡したい

    いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005、CLRプロジェクト(C++/CLI)で コーディングしています。 早速ですが、質問させて下記の内容について 質問させてください。 現在、Form1.hからForm2.hをモーダルで呼び出しています。 Form2.h終了時に、Form2.hで保持していたデータをForm1.hに 渡したいのですが、どのようにしたら宜しいでしょうか ※中間ファイルを作って、データ渡しはしない方法でお願いします。