ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:manabu1730 ,NET Framework のバージョンを指定して開発するには?
困り度:
  • すぐに回答を!
いつもお世話になっています。
現在、Visual C++ 2008 Express Editionを使用しての
.NETアプリケーションの開発を検討しております。

今回はできるだけ多くのWindowsOSに対応したいと思っています。
事前の調査で、[.NET Frameworkランタイム 2.0]に対応させれば
良いかと思っています。

ですが、どの様にすれば2.0向けに開発していく事ができるのでしょうか?
MSDNでリファレンスを探って、2.0以前のAPIだけを使う様に
していくのでしょうか?

もし、Visual C++の方でバージョンが指定できるのであれば
その方法をご教示頂きたいと思います。
質問投稿日時:09/10/29 10:41
質問番号:5405547
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:himajin100000 VC++ 2008 Express Edition 英語版(あまり使ってない)

1.適当にCLRプロジェクトを作成。
2.Solution Explorerからプロジェクトを選択して、コンテキストメニューからPropertiesを選択。
3.出てきたダイアログのツリーのCommon Properties -> Framework and Referencesに
Targeted Frameworkがあるので.NET Framework 2.0を選択、で出来ると思う。

.NET 3.0以上のライブラリを追加できなくなり、あるいは既に追加していた場合はアイコンに赤いしるしが付く

#実際に動かしてはいないので自信ないけど。
#chie65535さんの話を検討してもいません。ごめんね。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:09/10/29 11:41
回答番号:No.2
この回答へのお礼おかげさまで2.0をターゲットにすることができました。
とりあえずサンプルで作成したプログラムが動作する事は確認できました。

ありがとうございました。助かりました。

回答

良回答10pt

回答者:chie65535 >MSDNでリファレンスを探って、2.0以前のAPIだけを使う様に
>していくのでしょうか?

そうですね。「2.0までのAPIのみ使う」と言う事になります。

たいていは「インクルードしているヘッダファイルに、2.0までのAPIしか定義されてない」って状況であればOKです。

ヘッダファイルに3.0や3.5用のAPI関数の定義が無いなら、うっかり3.0や3.5用のAPI関数を呼び出してコンパイルしても、コンパイルの時点で「そんな関数は無い」って怒られるので、うっかりに気付ける筈ですから。

とは言え「2.0までと3.0以降で、呼び出すAPIの関数名と引数は同じだが、受け渡すデータや結果が異なる」と言う場合は、ヘッダファイルでの対処は効きません。受け渡すデータの違いや結果の違いは、コンパイル時ではなく、実行時にしか判りませんから。

なお、通常、ソフトウェアデベロッパーキット(SDK)に入っているヘッダファイルは「特定の、ある識別子をマクロ定義しておくと、特定のバージョン用としてコンパイルされるようになっている筈」です。

ヘッダファイルは、例えば、以下のような構造になっている筈です。

#ifndef XXX_VER
#define XXX_VER 350 //識別子XXX_VERが未定義なら最新の350と定義する
#endif

//全バージョンに共通のAPI関数の定義
//無条件にコンパイルされる
void API_Func1(ほげほげ);
void API_Func2(ほげほげ);
void API_Func3(ほげほげ);

//バージョン1.0ででしか使えない、2.0以降で廃止されたAPI関数の定義
//XXX_VERが100以下に定義されている場合のみコンパイルされる
#if (XXX_VER <= 100)
void API_Func4(ほげほげ);
void API_Func5(ほげほげ);
#endif

//バージョン2.0以降用のAPI関数の定義
//XXX_VERが200以上に定義されている場合のみコンパイルされる
#if (XXX_VER >= 200)
void API_Func6(ほげほげ);
void API_Func7(ほげほげ);
#endif

このようにしておくと「XXX_VERが未定義なら最新版用として、XXX_VERが定義されていたら、定義した値に合わせてコンパイル」されます。

.NETのSDKのヘッダも、このような構造になっている筈なので、一度、ヘッダファイルに目を通してみると良いです。

必ず、上記のような「条件付コンパイル」が行えるようになっている筈です。

ですが「マイクロソフトは想像の斜め上を行く、非常識なソフト開発会社」ですので、.NETのSDKが、上記のような条件付コンパイルに対応しているとは限りません。

マイクロソフトなら「2.0用に開発したいなら、2.0用のSDKをインストールしろ。他のバージョンの事なんか知らん」っていう作り方をしていそうです。その場合は「全バージョンに対応できるよう、ヘッダファイルを自分で書き変えて、条件付コンパイルが出来るように改造」しなければなりません。
種類:回答
どんな人:一般人
自信:参考意見
回答日時:09/10/29 11:35
回答番号:No.1
この回答へのお礼迅速に回答頂きありがとうございます。

今回はターゲットを簡易に指定できる事がわかりましたが、
今後の参考になるご意見を頂けたと思います。
ありがとうございました。
最新から表示回答順に表示良回答のみ表示