私は現在 WindowsXP VC++2008 Express Editionという環境で
プログラムを作っていますが、解らないことがあります。
多いので番号を振ろうと思います。
1.新しいプロジェクトを作る際、CLRで4つ、Win32、全般で2つずつ、
それに加えてオンラインテンプレートの検索、という
合計9つの選択肢がありますが、
CLRから選べる4つは全てCLRの特性を持っているということなんでしょうか?
つまりソフト配布の際にNET.FRAMEWORKも一緒に配布しなければならない等の
規則を守る必要があるのでしょうか。
また、Win32の2つも同様にWin32の特性を持ったものとなるのでしょうか。
私はクラスライブラリがCLRに当てはまるとは思えないのです。
2.WinMain関数とmain関数はそれぞれWin32、コンソールで使うと区別するらしいですが、
どこかで処理が違うとか何とか書いてあった気がするのですが記憶違いでしょうか?
また、他に違いはないのでしょうか?
3.WindowsアプリケーションというのはWindowsで動くアプリ全般をいうのなら、
このサイトの検索でたくさん引っかかるように多くの方が
質問文に記述しているのはなぜなんでしょうか?
そもそもWindowsアプリに対する考えが間違っているんでしょうか。
4.ワークスペースとプロジェクトはどちらも入れ物?で
ワークスペースはプロジェクトを一つ以上、
プロジェクトは「・・・.exe」を作るために必要なファイルの入れ物
ということで間違ってませんか?
5.プロジェクトを作成後に違うものに変更するには
メモ帳等にコピーして、新規作成したものに貼り付けるしかないのでしょうか。
また、作成後にプロジェクトがCLR、コンソールか否かなど確かめる方法はありませんか。
以上の5点を教えてください。
プロジェクトについて
Re: プロジェクトについて
CLR以下のものは,C++ではなくC++/CLIを使うためのプロジェクトになります。zxc さんが書きました: CLRから選べる4つは全てCLRの特性を持っているということなんでしょうか?
つまりソフト配布の際にNET.FRAMEWORKも一緒に配布しなければならない等の
規則を守る必要があるのでしょうか。
C++/CLIはその名の通りCLI上で動くので,CLIの実装であるCLR,つまりは.NET Frameworkを当然利用することになります。
# monoなどの別のCLI実装を利用する場合は別ですが。
ちなみに,
・CLI : 共通言語基盤。ISO/IEC 23271
・CLR : 共通言語ランタイム。CLIのMicrosoftによる実装
・.NET Framework : CLR及び追加のライブラリ群 (WinForms, ASP.NET, WPF, WCF, WF, etc.) の総称
となります。
Windows用アプリケーションのうち,.NET Frameworkを使わないもの,という扱いです。zxc さんが書きました:また、Win32の2つも同様にWin32の特性を持ったものとなるのでしょうか。
# ATL関連やMFC関連なども.NET Fxを原則使わないですがWin32以下にはないです。非Express用のテンプレートですが。
Visual Studioでの用語として,クラスライブラリは,.NET Framework用の物を言います。zxc さんが書きました:私はクラスライブラリがCLRに当てはまるとは思えないのです。
スタティックライブラリやDLL (ダイナミックリンクライブラリ) は,非CLR用の物を言います。
# 一応,相互運用可能ですが。
リンカの/SUBSYSTEMオプションで区別されます。zxc さんが書きました: 2.WinMain関数とmain関数はそれぞれWin32、コンソールで使うと区別するらしいですが、
どこかで処理が違うとか何とか書いてあった気がするのですが記憶違いでしょうか?
また、他に違いはないのでしょうか?
さらに,エントリポイントはリンカの/ENTRYでオプションで指定されますが,デフォルト値は/SUBSYSTEMによって決定されます。
/SUBSYSTEM:Windowsと/SYBSYSTEM:Consoleでは,「コンソールを必要とするか否か」が一番大きな違いになります。
根本的にOSとしてWindows (のみ) を対象としているとは限らないからです。zxc さんが書きました: 3.WindowsアプリケーションというのはWindowsで動くアプリ全般をいうのなら、
このサイトの検索でたくさん引っかかるように多くの方が
質問文に記述しているのはなぜなんでしょうか?
そもそもWindowsアプリに対する考えが間違っているんでしょうか。
現行のVisual Studioにワークスペースは存在しません。zxc さんが書きました: 4.ワークスペースとプロジェクトはどちらも入れ物?で
ワークスペースはプロジェクトを一つ以上、
プロジェクトは「・・・.exe」を作るために必要なファイルの入れ物
ということで間違ってませんか?
# VS6までのはず。
ソリューションは,関連する一連のプロジェクトとファイルの集まりになります。
違うもの,というのは何が違うのでしょうか。zxc さんが書きました: 5.プロジェクトを作成後に違うものに変更するには
メモ帳等にコピーして、新規作成したものに貼り付けるしかないのでしょうか。
基本的に,作成されるプロジェクトは最初に含まれる設定等が異なるだけで,
プロジェクト自体は「Visual C++のプロジェクト」というただ一つの種類しかありません。
作成時のプロジェクトの種類を変更したいのであれば,プロジェクトの設定を変更すればよいです。
大量に変更点がある場合,プロジェクトを作り直した方が早いこともありますが。
先に書いた通り,Visual C++のプロジェクトであることにかわりはありません。zxc さんが書きました:また、作成後にプロジェクトがCLR、コンソールか否かなど確かめる方法はありませんか。
コンパイルやリンクにおけるオプションの違いは,プロジェクトのプロパティを参照することで確認可能です。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: プロジェクトについて
大体はYuOさんが書かれたとおりなのですが少しだけ補足します。
もし/clr系のどれかが選ばれていればC++/CLIと言う.NetFrameWorkを必要とする言語ということなります。
コンソールか否かはWinMainで始まるかmainで始めるかで区別できます(GTK+などを利用している場合は違います)。
あとプロジェクト名を便利に切り替え仕組みは無いみたいなので、ソースファイルはコピーしてプロジェクトを新規に作りましょう。
プロジェクトの構成プロパティで共通言語ランタイムサポートがなしになっていればネイティブなC/C++です。zxc さんが書きました:5.プロジェクトを作成後に違うものに変更するには
メモ帳等にコピーして、新規作成したものに貼り付けるしかないのでしょうか。
また、作成後にプロジェクトがCLR、コンソールか否かなど確かめる方法はありませんか。
もし/clr系のどれかが選ばれていればC++/CLIと言う.NetFrameWorkを必要とする言語ということなります。
コンソールか否かはWinMainで始まるかmainで始めるかで区別できます(GTK+などを利用している場合は違います)。
あとプロジェクト名を便利に切り替え仕組みは無いみたいなので、ソースファイルはコピーしてプロジェクトを新規に作りましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
zxc
Re: プロジェクトについて
「Common Language Infrastructure」のほうですよね。YuO さんが書きました: CLR以下のものは,C++ではなくC++/CLIを使うためのプロジェクトになります。
C++/CLIはその名の通りCLI上で動くので,CLIの実装であるCLR,つまりは.NET Frameworkを当然利用することになります。
# monoなどの別のCLI実装を利用する場合は別ですが。
ちなみに,
・CLI : 共通言語基盤。ISO/IEC 23271
・CLR : 共通言語ランタイム。CLIのMicrosoftによる実装
・.NET Framework : CLR及び追加のライブラリ群 (WinForms, ASP.NET, WPF, WCF, WF, etc.) の総称
となります。
そして.NET Frameworkは総称なんですね。
「.NET Framework」というものがファイルで存在すると思っていました。
ライブラリは「.NET Framework用」とそうでないもの(スタティックやDLL)に大別され、YuO さんが書きました: Windows用アプリケーションのうち,.NET Frameworkを使わないもの,という扱いです。
# ATL関連やMFC関連なども.NET Fxを原則使わないですがWin32以下にはないです。非Express用のテンプレートですが。
Visual Studioでの用語として,クラスライブラリは,.NET Framework用の物を言います。
スタティックライブラリやDLL (ダイナミックリンクライブラリ) は,非CLR用の物を言います。
# 一応,相互運用可能ですが。
前者がクラスライブラリということですね。間違っていました。
YuO さんが書きました:
リンカの/SUBSYSTEMオプションで区別されます。
さらに,エントリポイントはリンカの/ENTRYでオプションで指定されますが,デフォルト値は/SUBSYSTEMによって決定されます。
/SUBSYSTEM:Windowsと/SYBSYSTEM:Consoleでは,「コンソールを必要とするか否か」が一番大きな違いになります。
そのコンソールとは
「コンピュータ制御に用いる入出力装置のセット」
とは違う意味合いなのでしょうか?
これでは合わないような気がします。
また、「/SUBSYSTEM:Windows」がコンソールを必要とする方なのですか?
つまりMacや携帯端末には使用する予定が無い、ということでYuO さんが書きました:
根本的にOSとしてWindows (のみ) を対象としているとは限らないからです。
「Windowsアプリケーションである」等の記述があったわけですね。
参考にしていたサイトが多少古かったのかもしれません。YuO さんが書きました:
現行のVisual Studioにワークスペースは存在しません。
# VS6までのはず。
ソリューションは,関連する一連のプロジェクトとファイルの集まりになります。
既に廃止されてたとは知りませんでした。
違いが良くわからないのですが、ワークスペースも
ソリューションも「プロジェクトを入れる入れ物」と考えて良いのでしょうかよう。
YuO さんが書きました: 関連する一連のプロジェクトとファイルの集まり
に出てくるファイルとはプロジェクトの内部のものを指しているのでしょうか。
それともまだ私が見たことのない、プロジェクトに含まれずソリューションに
含まれる、という プロジェクトと並列(といって良いのでしょうか?)の
関係を持つフォルダがあるケースがあるということですか?
9つの選択肢は全てプロジェクトを作ることに変わりは無いのですね。YuO さんが書きました: 違うもの,というのは何が違うのでしょうか。
基本的に,作成されるプロジェクトは最初に含まれる設定等が異なるだけで,
プロジェクト自体は「Visual C++のプロジェクト」というただ一つの種類しかありません。
作成時のプロジェクトの種類を変更したいのであれば,
プロジェクトの設定を変更すればよいです。
先に書いた通り,Visual C++のプロジェクトであることにかわりはありません。
コンパイルやリンクにおけるオプションの違いは,プロジェクトのプロパティを参照することで確認可能です。
違うものとはWin32プロジェクトやWin32コンソールアプリや
CLRコンソールのことを言いたかったのです。
ですがプロジェクトの設定の変更とはどのようにやるのでしょう?
例としてはWin32コンソールからWin32プロジェクトへの変更等です。
プロジェクト→構成プロパティ→全般→共通言語ランタイムサポートsoftya(ソフト屋) さんが書きました:大体はYuOさんが書かれたとおりなのですが少しだけ補足します。
プロジェクトの構成プロパティで共通言語ランタイムサポートがなしになっていればネイティブなC/C++です。
もし/clr系のどれかが選ばれていればC++/CLIと言う.NetFrameWorkを必要とする言語ということなります。
コンソールか否かはWinMainで始まるかmainで始めるかで区別できます(GTK+などを利用している場合は違います)。
が使用しないになっているか「・・・/crl」で、「C++」と「C++/CLI」を区別し、
mainかWinmainでコンソールか否かを区別するのですね。
プロジェクトの名前というのは文字通りプロジェクトの名前そのものでしょうか?softya(ソフト屋) さんが書きました: あとプロジェクト名を便利に切り替え仕組みは無いみたいなので、ソースファイルはコピーしてプロジェクトを新規に作りましょう。
それともWin32コンソールからWin32プロジェクトへの変更等のことなのですか?
Re: プロジェクトについて
コンソールを誤解を承知で一言で言うなら「コマンドプロンプト」です。zxc さんが書きました:YuO さんが書きました:
リンカの/SUBSYSTEMオプションで区別されます。
さらに,エントリポイントはリンカの/ENTRYでオプションで指定されますが,デフォルト値は/SUBSYSTEMによって決定されます。
/SUBSYSTEM:Windowsと/SYBSYSTEM:Consoleでは,「コンソールを必要とするか否か」が一番大きな違いになります。
そのコンソールとは
「コンピュータ制御に用いる入出力装置のセット」
とは違う意味合いなのでしょうか?
これでは合わないような気がします。
また、「/SUBSYSTEM:Windows」がコンソールを必要とする方なのですか?
当然,/SUBSYSTEM:Consoleがコンソールを必要とする (コマンドプロンプト上で実行される) プログラムとなります。
プロジェクトに含まれないファイルをソリューションに入れることも出来ます。zxc さんが書きました: 違いが良くわからないのですが、ワークスペースも
ソリューションも「プロジェクトを入れる入れ物」と考えて良いのでしょうかよう。YuO さんが書きました: 関連する一連のプロジェクトとファイルの集まり
に出てくるファイルとはプロジェクトの内部のものを指しているのでしょうか。
それともまだ私が見たことのない、プロジェクトに含まれずソリューションに
含まれる、という プロジェクトと並列(といって良いのでしょうか?)の
関係を持つフォルダがあるケースがあるということですか?
ソリューションエクスプローラからソリューションを右クリックして,[追加]-[新しい項目]や[追加]-[既存の項目]でファイルを追加できます。
また,論理的な構造としてフォルダを作成できます。
Win32プロジェクトはWin32コンソールの機能も含みますが……。zxc さんが書きました:9つの選択肢は全てプロジェクトを作ることに変わりは無いのですね。YuO さんが書きました: 違うもの,というのは何が違うのでしょうか。
基本的に,作成されるプロジェクトは最初に含まれる設定等が異なるだけで,
プロジェクト自体は「Visual C++のプロジェクト」というただ一つの種類しかありません。
作成時のプロジェクトの種類を変更したいのであれば,
プロジェクトの設定を変更すればよいです。
先に書いた通り,Visual C++のプロジェクトであることにかわりはありません。
コンパイルやリンクにおけるオプションの違いは,プロジェクトのプロパティを参照することで確認可能です。
違うものとはWin32プロジェクトやWin32コンソールアプリや
CLRコンソールのことを言いたかったのです。
ですがプロジェクトの設定の変更とはどのようにやるのでしょう?
例としてはWin32コンソールからWin32プロジェクトへの変更等です。
例えば,Win32 Window ApplicationからWin32 Console Applicationに変更するには,
プロジェクトのプロパティから,
[構成プロパティ]-[リンカ]-[システム]-[サブシステム]を,
・Windows (/SUBSYSTEM:WINDOWS)
から,
・コンソール (/SUBSYSTEM:CONSOLE)
に変更することになります。
原則はこれだけです。
# .cppファイルに書かれている内容や,"stdafx.h"の内容に違いがあるかもしれませんが。
プロジェクト名だけであればソリューションエクスプローラ上で名前を変更すればいいのですけどね。softya(ソフト屋) さんが書きました:あとプロジェクト名を便利に切り替え仕組みは無いみたいなので、ソースファイルはコピーしてプロジェクトを新規に作りましょう。
属するフォルダ名の変更も伴おうとすると,面倒なのは確かです。
# .slnとか.*projファイルをいじるだけの話ではありますが。
Re: プロジェクトについて
新規作成時に選択するプロジェクトテンプレートは、初期設定に過ぎません。
他のテンプレートを選んだときの内容に変更したいならプロジェクトのプロパティから各設定を変更すれば良いです。
基本的にはプロジェクトを作成し直したほうが早いと思いますけど。
*.slnや*.vcproj(*.vcxproj)のファイルはテキスト形式ですので、各テンプレートでプロジェクトを作成してからメモ帳などのテキストエディタで開いて、違いを見てみたら良いと思います。
他のテンプレートを選んだときの内容に変更したいならプロジェクトのプロパティから各設定を変更すれば良いです。
基本的にはプロジェクトを作成し直したほうが早いと思いますけど。
*.slnや*.vcproj(*.vcxproj)のファイルはテキスト形式ですので、各テンプレートでプロジェクトを作成してからメモ帳などのテキストエディタで開いて、違いを見てみたら良いと思います。
-
zxc
Re: プロジェクトについて
途中、変な文字や括弧が入ってしまい申し訳ありません。
最初はコンソール=コマンドプロンプト という認識でよいのですね。
コマンドプロンプトが出てきて動作するものがコンソールを必要とするものという認識で
よろしいのでしょうか?コンソールが不要なものはコマンドプロンプトが出ないのですか。
何かしら便利なんでしょうね。論理的というのは条件分岐やループ等の
処理のことですよね。
完全に別物と思っていました。ですが
「Win32 Window Application」
というものがまったく解りません。
検索してもこの語が多く引っかかりますが、プロジェクトの選択肢にそのような
ものがないので、Win32で選べる2つの総称と思っていましたが
Win32プロジェクトがWin32コンソールアプリケーションを含んでいるならおかしいですよね。
もしかしたらWin32プロジェクトからコンソールを除いたものかとも思いました。
ですが私が間違って覚えているようなので確信がもてません。
# .slnや.*projをいじるのは難しそうですし、手間がかかりそうです。
やはり作成しなおすほうが簡単で速いですね。
YuO さんが書きました: コンソールを誤解を承知で一言で言うなら「コマンドプロンプト」です。
当然,/SUBSYSTEM:Consoleがコンソールを必要とする (コマンドプロンプト上で実行される) プログラムとなります。
最初はコンソール=コマンドプロンプト という認識でよいのですね。
コマンドプロンプトが出てきて動作するものがコンソールを必要とするものという認識で
よろしいのでしょうか?コンソールが不要なものはコマンドプロンプトが出ないのですか。
一応可能なのですか。今のところあまり利点等思いつきませんがYuO さんが書きました: プロジェクトに含まれないファイルをソリューションに入れることも出来ます。
また,論理的な構造としてフォルダを作成できます。
何かしら便利なんでしょうね。論理的というのは条件分岐やループ等の
処理のことですよね。
そうだったのですか。だとするとコンソールをわざわざ選ばなくともよさそうに思えます。YuO さんが書きました: Win32プロジェクトはWin32コンソールの機能も含みますが……。
完全に別物と思っていました。ですが
「Win32 Window Application」
というものがまったく解りません。
検索してもこの語が多く引っかかりますが、プロジェクトの選択肢にそのような
ものがないので、Win32で選べる2つの総称と思っていましたが
Win32プロジェクトがWin32コンソールアプリケーションを含んでいるならおかしいですよね。
もしかしたらWin32プロジェクトからコンソールを除いたものかとも思いました。
ですが私が間違って覚えているようなので確信がもてません。
そういう理由で作り直したほうが簡単というわけですね。YuO さんが書きました: # .cppファイルに書かれている内容や,"stdafx.h"の内容に違いがあるかもしれませんが。
# .slnや.*projをいじるのは難しそうですし、手間がかかりそうです。
つまりその違いがわかれば、書き換えるなどで変更可能ということですね。ISLe さんが書きました:新規作成時に選択するプロジェクトテンプレートは、初期設定に過ぎません。
他のテンプレートを選んだときの内容に変更したいならプロジェクトのプロパティから各設定を変更すれば良いです。
基本的にはプロジェクトを作成し直したほうが早いと思いますけど。
*.slnや*.vcproj(*.vcxproj)のファイルはテキスト形式ですので、各テンプレートでプロジェクトを作成してからメモ帳などのテキストエディタで開いて、違いを見てみたら良いと思います。
やはり作成しなおすほうが簡単で速いですね。