プロジェクトについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
zxc

プロジェクトについて

#1

投稿記事 by zxc » 14年前

  私は現在 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点を教えてください。

YuO
記事: 947
登録日時: 15年前
住所: 東京都世田谷区

Re: プロジェクトについて

#2

投稿記事 by YuO » 14年前

zxc さんが書きました: CLRから選べる4つは全てCLRの特性を持っているということなんでしょうか?
つまりソフト配布の際にNET.FRAMEWORKも一緒に配布しなければならない等の
規則を守る必要があるのでしょうか。
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.) の総称
となります。
zxc さんが書きました:また、Win32の2つも同様にWin32の特性を持ったものとなるのでしょうか。
Windows用アプリケーションのうち,.NET Frameworkを使わないもの,という扱いです。
# ATL関連やMFC関連なども.NET Fxを原則使わないですがWin32以下にはないです。非Express用のテンプレートですが。
zxc さんが書きました:私はクラスライブラリがCLRに当てはまるとは思えないのです。
Visual Studioでの用語として,クラスライブラリは,.NET Framework用の物を言います。
スタティックライブラリやDLL (ダイナミックリンクライブラリ) は,非CLR用の物を言います。
# 一応,相互運用可能ですが。
zxc さんが書きました: 2.WinMain関数とmain関数はそれぞれWin32、コンソールで使うと区別するらしいですが、
どこかで処理が違うとか何とか書いてあった気がするのですが記憶違いでしょうか?
また、他に違いはないのでしょうか?
リンカの/SUBSYSTEMオプションで区別されます。
さらに,エントリポイントはリンカの/ENTRYでオプションで指定されますが,デフォルト値は/SUBSYSTEMによって決定されます。
/SUBSYSTEM:Windowsと/SYBSYSTEM:Consoleでは,「コンソールを必要とするか否か」が一番大きな違いになります。
zxc さんが書きました: 3.WindowsアプリケーションというのはWindowsで動くアプリ全般をいうのなら、
このサイトの検索でたくさん引っかかるように多くの方が
質問文に記述しているのはなぜなんでしょうか?
そもそもWindowsアプリに対する考えが間違っているんでしょうか。
根本的にOSとしてWindows (のみ) を対象としているとは限らないからです。
zxc さんが書きました: 4.ワークスペースとプロジェクトはどちらも入れ物?で
ワークスペースはプロジェクトを一つ以上、
プロジェクトは「・・・.exe」を作るために必要なファイルの入れ物
ということで間違ってませんか?
現行のVisual Studioにワークスペースは存在しません。
# VS6までのはず。
ソリューションは,関連する一連のプロジェクトとファイルの集まりになります。
zxc さんが書きました: 5.プロジェクトを作成後に違うものに変更するには
メモ帳等にコピーして、新規作成したものに貼り付けるしかないのでしょうか。
違うもの,というのは何が違うのでしょうか。
基本的に,作成されるプロジェクトは最初に含まれる設定等が異なるだけで,
プロジェクト自体は「Visual C++のプロジェクト」というただ一つの種類しかありません。
作成時のプロジェクトの種類を変更したいのであれば,プロジェクトの設定を変更すればよいです。

大量に変更点がある場合,プロジェクトを作り直した方が早いこともありますが。
zxc さんが書きました:また、作成後にプロジェクトがCLR、コンソールか否かなど確かめる方法はありませんか。
先に書いた通り,Visual C++のプロジェクトであることにかわりはありません。
コンパイルやリンクにおけるオプションの違いは,プロジェクトのプロパティを参照することで確認可能です。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: プロジェクトについて

#3

投稿記事 by softya(ソフト屋) » 14年前

大体はYuOさんが書かれたとおりなのですが少しだけ補足します。
zxc さんが書きました:5.プロジェクトを作成後に違うものに変更するには
メモ帳等にコピーして、新規作成したものに貼り付けるしかないのでしょうか。
また、作成後にプロジェクトがCLR、コンソールか否かなど確かめる方法はありませんか。
プロジェクトの構成プロパティで共通言語ランタイムサポートがなしになっていればネイティブなC/C++です。
もし/clr系のどれかが選ばれていればC++/CLIと言う.NetFrameWorkを必要とする言語ということなります。

コンソールか否かはWinMainで始まるかmainで始めるかで区別できます(GTK+などを利用している場合は違います)。

あとプロジェクト名を便利に切り替え仕組みは無いみたいなので、ソースファイルはコピーしてプロジェクトを新規に作りましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

zxc

Re: プロジェクトについて

#4

投稿記事 by zxc » 14年前

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.) の総称
となります。
「Common Language Infrastructure」のほうですよね。
そして.NET Frameworkは総称なんですね。
「.NET Framework」というものがファイルで存在すると思っていました。

YuO さんが書きました: Windows用アプリケーションのうち,.NET Frameworkを使わないもの,という扱いです。
# ATL関連やMFC関連なども.NET Fxを原則使わないですがWin32以下にはないです。非Express用のテンプレートですが。


Visual Studioでの用語として,クラスライブラリは,.NET Framework用の物を言います。
スタティックライブラリやDLL (ダイナミックリンクライブラリ) は,非CLR用の物を言います。
# 一応,相互運用可能ですが。
 ライブラリは「.NET Framework用」とそうでないもの(スタティックやDLL)に大別され、
前者がクラスライブラリということですね。間違っていました。
YuO さんが書きました: 
リンカの/SUBSYSTEMオプションで区別されます。
さらに,エントリポイントはリンカの/ENTRYでオプションで指定されますが,デフォルト値は/SUBSYSTEMによって決定されます。
/SUBSYSTEM:Windowsと/SYBSYSTEM:Consoleでは,「コンソールを必要とするか否か」が一番大きな違いになります。
 
 そのコンソールとは
「コンピュータ制御に用いる入出力装置のセット」
 とは違う意味合いなのでしょうか?
これでは合わないような気がします。 
また、「/SUBSYSTEM:Windows」がコンソールを必要とする方なのですか?
YuO さんが書きました: 
根本的にOSとしてWindows (のみ) を対象としているとは限らないからです。
 つまりMacや携帯端末には使用する予定が無い、ということで
「Windowsアプリケーションである」等の記述があったわけですね。
YuO さんが書きました: 
現行のVisual Studioにワークスペースは存在しません。
# VS6までのはず。
ソリューションは,関連する一連のプロジェクトとファイルの集まりになります。
  参考にしていたサイトが多少古かったのかもしれません。
既に廃止されてたとは知りませんでした。

 違いが良くわからないのですが、ワークスペースも
ソリューションも「プロジェクトを入れる入れ物」と考えて良いのでしょうかよう。
YuO さんが書きました: 関連する一連のプロジェクトとファイルの集まり
 
に出てくるファイルとはプロジェクトの内部のものを指しているのでしょうか。
 それともまだ私が見たことのない、プロジェクトに含まれずソリューションに
含まれる、という プロジェクトと並列(といって良いのでしょうか?)の
関係を持つフォルダがあるケースがあるということですか?
YuO さんが書きました: 違うもの,というのは何が違うのでしょうか。
基本的に,作成されるプロジェクトは最初に含まれる設定等が異なるだけで,
プロジェクト自体は「Visual C++のプロジェクト」というただ一つの種類しかありません。
作成時のプロジェクトの種類を変更したいのであれば,
プロジェクトの設定を変更すればよいです。
 先に書いた通り,Visual C++のプロジェクトであることにかわりはありません。
コンパイルやリンクにおけるオプションの違いは,プロジェクトのプロパティを参照することで確認可能です。
 9つの選択肢は全てプロジェクトを作ることに変わりは無いのですね。
違うものとは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プロジェクトへの変更等のことなのですか?

YuO
記事: 947
登録日時: 15年前
住所: 東京都世田谷区

Re: プロジェクトについて

#5

投稿記事 by YuO » 14年前

zxc さんが書きました:
YuO さんが書きました: 
リンカの/SUBSYSTEMオプションで区別されます。
さらに,エントリポイントはリンカの/ENTRYでオプションで指定されますが,デフォルト値は/SUBSYSTEMによって決定されます。
/SUBSYSTEM:Windowsと/SYBSYSTEM:Consoleでは,「コンソールを必要とするか否か」が一番大きな違いになります。
 
 そのコンソールとは
「コンピュータ制御に用いる入出力装置のセット」
 とは違う意味合いなのでしょうか?
これでは合わないような気がします。 
また、「/SUBSYSTEM:Windows」がコンソールを必要とする方なのですか?
コンソールを誤解を承知で一言で言うなら「コマンドプロンプト」です。
当然,/SUBSYSTEM:Consoleがコンソールを必要とする (コマンドプロンプト上で実行される) プログラムとなります。
zxc さんが書きました: 違いが良くわからないのですが、ワークスペースも
ソリューションも「プロジェクトを入れる入れ物」と考えて良いのでしょうかよう。
YuO さんが書きました: 関連する一連のプロジェクトとファイルの集まり
 
に出てくるファイルとはプロジェクトの内部のものを指しているのでしょうか。
 それともまだ私が見たことのない、プロジェクトに含まれずソリューションに
含まれる、という プロジェクトと並列(といって良いのでしょうか?)の
関係を持つフォルダがあるケースがあるということですか?
プロジェクトに含まれないファイルをソリューションに入れることも出来ます。
ソリューションエクスプローラからソリューションを右クリックして,[追加]-[新しい項目]や[追加]-[既存の項目]でファイルを追加できます。
また,論理的な構造としてフォルダを作成できます。
zxc さんが書きました:
YuO さんが書きました: 違うもの,というのは何が違うのでしょうか。
基本的に,作成されるプロジェクトは最初に含まれる設定等が異なるだけで,
プロジェクト自体は「Visual C++のプロジェクト」というただ一つの種類しかありません。
作成時のプロジェクトの種類を変更したいのであれば,
プロジェクトの設定を変更すればよいです。
 先に書いた通り,Visual C++のプロジェクトであることにかわりはありません。
コンパイルやリンクにおけるオプションの違いは,プロジェクトのプロパティを参照することで確認可能です。
 9つの選択肢は全てプロジェクトを作ることに変わりは無いのですね。
違うものとはWin32プロジェクトやWin32コンソールアプリや
CLRコンソールのことを言いたかったのです。
ですがプロジェクトの設定の変更とはどのようにやるのでしょう?
例としてはWin32コンソールからWin32プロジェクトへの変更等です。
Win32プロジェクトはWin32コンソールの機能も含みますが……。
例えば,Win32 Window ApplicationからWin32 Console Applicationに変更するには,
プロジェクトのプロパティから,
[構成プロパティ]-[リンカ]-[システム]-[サブシステム]を,
・Windows (/SUBSYSTEM:WINDOWS)
から,
・コンソール (/SUBSYSTEM:CONSOLE)
に変更することになります。
原則はこれだけです。
# .cppファイルに書かれている内容や,"stdafx.h"の内容に違いがあるかもしれませんが。
softya(ソフト屋) さんが書きました:あとプロジェクト名を便利に切り替え仕組みは無いみたいなので、ソースファイルはコピーしてプロジェクトを新規に作りましょう。
プロジェクト名だけであればソリューションエクスプローラ上で名前を変更すればいいのですけどね。
属するフォルダ名の変更も伴おうとすると,面倒なのは確かです。
# .slnとか.*projファイルをいじるだけの話ではありますが。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: プロジェクトについて

#6

投稿記事 by ISLe » 14年前

新規作成時に選択するプロジェクトテンプレートは、初期設定に過ぎません。
他のテンプレートを選んだときの内容に変更したいならプロジェクトのプロパティから各設定を変更すれば良いです。
基本的にはプロジェクトを作成し直したほうが早いと思いますけど。

*.slnや*.vcproj(*.vcxproj)のファイルはテキスト形式ですので、各テンプレートでプロジェクトを作成してからメモ帳などのテキストエディタで開いて、違いを見てみたら良いと思います。

zxc

Re: プロジェクトについて

#7

投稿記事 by zxc » 14年前

 途中、変な文字や括弧が入ってしまい申し訳ありません。
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)のファイルはテキスト形式ですので、各テンプレートでプロジェクトを作成してからメモ帳などのテキストエディタで開いて、違いを見てみたら良いと思います。
  つまりその違いがわかれば、書き換えるなどで変更可能ということですね。
やはり作成しなおすほうが簡単で速いですね。

閉鎖

“C言語何でも質問掲示板” へ戻る