Visual Studio 2005 Beta2 の評価中

観測気球

収集物の記録書庫 a data archive of collection -- collectible toys

[要旨] Visual Studio 2005 の beta 2 を入れてみました。今までの版に比べて、かなりデバッグしやすくなっています。が、問題点もちらほら。
[キーワード] C++,.NET,ビルド,リンク

« 苺ましまろ トレーディングカード | トップページ | 今週のNARUTO(BlogPet) »

2005.09.23

Visual Studio 2005 Beta2 の評価中

何か今月は割り込み仕事が多くてなかなかまとまった時間が取れないんですが、ここ20日くらいの間、Visual Studio 2005 の Beta 2 を実際に使ってみています。(関連記事: Visual Studio 2005 Express Edition (beta 2))

インストール

Visual Studio 2005 の beta 2 は、マイクロソフトから DVD-ROM を通販で購入。1260円だったかな。届いた DVD-ROM は2枚組みで、1枚は Visual Studio 2005 の Team Suite の Beta 2 日本語版。もう1枚は SQL Server 2005 の Developer Edition の 6月 CPT 日本語版。

手順書を読むと、まず、SQL Server 2005、Visual Studio 2005、.NET Framework 2.0 の順にアンインストールし、SQL Server 2005 6月 CPT版をインストール、最後に Visual Studio 2005 Beta 2 を入れろ、と書いてあります。Visual Studio 2005 の Express Edition との共存ができるかどうか、どこにも書いてないんですが、思い切って同居にチャレンジ(要するに、Express Edition はアンインストールせずに、そのまま Visual Studio 2005 Beta 2 を入れてしまおう、ということ)。

Express Edition な SQL Server 2005 は 4月版なので、6月版に入れ替えた方がいいかな、と思って、アンインストール。DVD-ROM から SQL Server 2005 6月CPT を入れようとしたら、ノートン先生が「悪質なスクリプトを検出しました」と警告(笑)

とりあえず、警告を無視して作業を続行しようとしたら、今度はインストーラから、プロセッサのタイプが違う、という警告。どうも、この DVD-ROM に入っている SQL Serer は Win64 (64bitプロセッサ)用のようです。DVD-ROM の中身をエクスプローラで探検してみましたが、Win32 用の SQL Server は発見できず。仕方がないので、6月 CPT 版のインストールは諦めて、再度、Express Edition の SQL Server (4月版)をインストールし直し。この SQL Server の再インストールにもいろいろ罠があって苦労したのですが、その辺の作業状況は、ここでは省略します。

続いて、Visual Studio 2005 beta 2 の DVD-ROM から一式インストールします。こっちの DVD-ROM はちゃんと Win32 対応でした。たぶん、

.NET Expert #01
.NET Expert #01

という雑誌に付いている DVD-ROM と中身は同じだと思います。こんな雑誌が出るの知ってたら、DVD-ROM の通販には申し込まずに、こっちを買ってたよ。値段の差、約700円。この700円分が雑誌の値段だと思えば安いんじゃないかな、この雑誌。

Visual Studio 2005 Beta 2 と MSDN などのインストールが無事に完了。完全インストールを選択すると、インストールが終わるまでに、かなり時間がかかります。2時間くらい?

試しにビルドを実行

とりあえず、手近にある Visual Studio 6 (VC++) のプロジェクトを持ってきて、Visual Studio 2005 のソリューションに変換。コンパイルしてみると、warning の嵐。strcpy() や fopen() の引数が古い形式だという warning です。例えば、こんな感じ。

.\Setting.cpp(518) : warning C4996: 'strcpy' が古い形式として宣言されました。
        c:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(56) : 'strcpy' の宣言を確認してください。

この warning はとりあえず無視してもいいようです。Visual Studio のヘルプから辿れる例題でもこの warning が出るが無視してもいいよ、みたいなコメントが書いてあります。そうはいっても warning が出たままなのは気持ち悪いので何とかしたい。ヘッダファイル(include\string.h) のプロトタイプ宣言を見てみましたが、これでは warning が出ても当然かな、という感じがしました。要するに、managed な環境から ANSI C や Win32 API の関数を呼び出すためのプロトタイプ宣言になっていて、旧来の C++ (unmanaged な世界)のことは考えられていない書き方をしてるんですよね。なので、warning を出ないようにしようとしたら、ヘッダファイルをいじるか、自分の C/C++ コードを managed なコード(C++.NET)に書き直すしかない。どっちも面倒なのでパス (^^;

warning を無視しても問題ないようなので、そのままコンソールアプリケーションをビルドして動かしてみました。問題なく動作しました。ビルドした実行形式を Visual Studio の中から動かす場合、Visual Studio 6 や Visual Studio.NET 2003 では、コマンドプロンプトが立ち上がって、そのコマンドプロンプト内でアプリケーションが動くという方式でしたが、Visual Studio 2005 では、クイックコンソールという名前のペーンが Visual Studio 内にあり、そこで実行されます。なんかかっこいい!! まだ Beta 2 だからかもしれませんが、問題があって、対話型のコンソールアプリケーションは、標準入力から ctrl+Z を入力すると、そこで入力終了、というお約束(Windows や MS-DOS の場合)があるのですが、クイックコンソールの場合、ctrl+Z を入力しても完全に無視されてしまいます。ctrl+D とか ctrl+I とかは入力できるので、純粋に ctrl+Z の扱いだけが問題。仕方がないので、(UNIX 風に) ctrl+D を検出したら終わるように、アプリケーションのソースを書き換えて逃げました。

次。今度は Visual Studio 6 でビルドした DLL の .lib を Visual Studio 2005 でも使えるかどうかの確認。Visual Studio.NET 2003 では問題なく使えたので、2005 でも行けるかな、と思ったんですが、駄目でした。ビルド(リンク)は成功するんですが、できあがった実行形式を起動しようとすると、main() が呼び出されるよりもずっと前のところで access violation。デバッガ(というか Visual Studio 自身)で落ちたところを調べてみると、crt0.c で HeapAlloc() しているところで落ちているように見えます。が、よく見ると、スタックが破壊されているようなので、コールスタック(Visual Studio 2005 では「呼び出し履歴」と呼んでいます)も信用できません。おそらく、dll を load しようとして失敗し、落ちているんだと思います。

つまり、Visual Studio.NET 2003 までと、Visual Studio 2005 で、.lib の扱い方が変わったか、dll のロードの仕方が変わったか、要するに dll 回りに今までと互換性のない変更が加えられた可能性があるということです。dll 自体を Visual Studio 2005 でビルドし直して、そのときに吐き出される .lib を使えば、うまくいくのかもしれませんが、時間がなくて、まだそこまで調査できていません。

閑話休題。2つの Visual Studio 2005 の違い

Visual Studio 2005 Beta 2
Visual Studio 2005 Beta 2

Visual Studio 2005 Express Edition
Visual Studio 2005 Express Edition

Visual Studio 2005 Beta 2 と Visual Studio 2005 Express Edition の画面を見比べてみても、ほとんど差がないことがわかると思います。

結局、Visual Studio 2005 beta 2 と Express Edition の共存は問題なくできています。それどころか、 Visual Studio 2005 beta 2 を入れたおかげで、C/C++ のランタイム、ライブラリのソースも一緒に入り、Express Edition の方からもソースコードを見ながらデバッグ、ステップ実行ができるようになりました。結局、Express Edition は MFC/ATL なプロジェクトが作成できないのと、プロファイリング(パフォーマンスエクスプローラ)、その他若干のツールが使えないだけで、ほとんど Visual Studio 2005 の機能が使えます。あと、VSS との連携がサポートされていないのがちょっと痛いかな。

VSS と Team Foundation Server

VSS といえば、Visual Studio 2005 は Team Foundation Server 経由でバージョン管理をするようなのです。 Visual Studio 2005 から直に VSS を操作できません(Team Suite じゃない版からは VSS が呼び出せるのかもしれません)。VSS クライアントをスタンドアロンで動かして、手動でソースコードをチェックイン、チェックアウトすることになります。こんなの面倒だし、作業漏れが発生しそう。

そこで Team Foundation Server なのですが、何と、Visual Studio 2005 beta 2 の日本語版の DVD-ROM には収録されていないのです。Team Suite という名前は嘘なのか!! だまされた、という感じです。クライアントしか入っていないんですね。サーバの方が欲しかったら、英語版の DVD-ROM (1365円)を買え、ということらしいです。

ちなみに、MSDN のライセンスユーザ(MSDN Professional 以上限定)がダウンロードして手に入れることができる「日本語版」には、ちゃんとサーバも含まれているようです。悔しい。ということで、「.NET Expert #01」の付録の DVD-ROM にも、サーバは入っていないと思います。残念。

Visual Studio 2005 Beta 2 の使用期限

それから、DVD-ROM のどこを見てもライセンスの有効期限とか書いていないんですが、Web で調べると、

・Visual Studio 2005 Beta 2 には使用期限がありますか。
はい。2006 年 5 月 1 日 (月) または製品版リリース (いずれか早いほう) までの使用期限が、使用許諾契約書において設定されています。

Visual Studio 2005 よく寄せられる質問

ということだそうです。ちゃんと、DVD-ROM に添付されている書類にも明記して欲しい。

今回はここまで。


*** 2005年9月26日 追記 ***

warning C4996 の件

Security-Enhanced Versions of CRT Functions」に、なんでこんな warning が出るのか、理由が書いてありました。

つまりは、いくつかの関数については、セキュリティを高めた標準 C ライブラリ関数の
拡張版があるのでそっちを使ってくれ、という意味での警告ということでした。

lucille 開発日記: Security-Enhanced Versions of CRT Functions

そういうことでしたか。それならそうと、はっきりそうとわかる warning を出して欲しいぞ > マイクロソフト

ということで、例えば

char *strcpy( char *dist, const char *src );

errno_t strcpy_s( char *dist, size_t dist_size, const char *src );

に置き換えれば、warning は出なくなるようです(詳細は strcpy_s, wcscpy_s, _mbscpy_s を参照)。あくまで ANSI C 標準にこだわりたい人は warning を無視するか、コンパイル時に指定するオプションで warning を出ないようにするか、そういう選択しかないようです。なんだかなぁ。

strcpy() → strcpy_s() の置き換えを推奨しているのには、要するに buffer overrun (あるいは buffer overflow) の脆弱性を未然に防ぐという目的がある(「WhidbeyのCランタイム関数にバッファ・オーバーラン対策が施される」参照)のはよくわかるし、それが Visual C++ 固有のやり方でなければすぐに採用するのはやぶさかではないんですが、どうも Visual C++ 独自のやり方っぽいのが引っ掛かります。

セキュリティを高めたバージョンの標準 C ライブラリ関数の拡張版は、VC 固有のものでしょうか?

lucille 開発日記: Security-Enhanced Versions of CRT Functions

で、調べてみると、実は、現在 ISO で「C 標準ライブラリ関数をより安全、よりセキュアにするための仕様」(2005年9月6日版のドラフトがpdf形式で公開されています)として検討中のようです。Visual Studio 2005 の VC++ は、将来の標準の先取りをしているんですね。納得。

投稿者: tsupo 2005.09.23 午前 09:31 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | 酢鶏巡回中

楽天市場


品揃え豊富で安い!NTT-X Store


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:

この記事へのトラックバック一覧です: Visual Studio 2005 Beta2 の評価中:

» Visual Studio 2005 (Express 含む) のプレビュー版、ベータ版から正式版に移行するときの注意点 from 観測気球
Visual Studio 2005 のプレビュー版(もしくはベータ版)をアンインストールして、正式版をインストールする際にはまる問題点をまとめてみました。 続きを読む

受信: 2006.05.01 午前 01:01

» Visual C 2005 Express Edition で DLL を作成する from 観測気球
Visual C 2005 Express Edition で Win32 な DLL を作成できるように環境を整えるには、どうすればいいかをまとめてみました。 続きを読む

受信: 2006.05.17 午前 05:48

コメント


うちの会社の中高木で

投稿者: 酢鶏@人工無能 (2005.10.01 午前 07:27)

ワード

ニッセン

fujisan.co.jp

楽天市場