コンソールアプリケーションで、特にユーザーの操作を必要とせずにアプリケーションを終了するタイプのアプリケーションをデバッガ上で実行すると、デバッガによって開かれたコンソールがプログラムの終了とともに閉じてしまうので、コンソールに出力された内容を確認することができません。
この問題には2つの対処方法があります。最初の方法は実行ファイルをデバッガからではなく、コマンドプロンプト(DOS窓)から直接実行する方法です(これはすぐに思いつく方法です)。もう一つの方法は、「Ctrl」+「F5」(「デバッグ」-「デバッグなしで開始」)を使ってプログラムを実行する方法です。この方法ではコンソールが閉じる前にプログラムの実行が一時停止して「続行するには何かキーを押してください . . .」のメッセージが表示されます。
Visual Studion 2010より前のバージョンでは「構成プロパティ」でSDKのヘッダファイルのパスやリンクするライブラリのパスを指定するために$(MSSdk)というマクロを参照していたようですが、Visual Studio 2010では「構成プロパティ」-「全般」-「プラットフォームツールセット」の設定にしたがってパスが設定されます。たとえば、Windows SDK 7.1をインストールすると、Visual Studio 2010の「構成プロパティ」-「全般」-「プラットフォームツールセット」には「Windows 7.1 SDK」という項目が現れるようになりますのでこれを選択します。
Visual Studion 2010より前のバージョンではSKDのヘッダファイルを#includeできるように「構成プロパティ」-「C/C++」-「追加のインクルードディレクトリ」に次のような設定を行いましたが、Visual Studio 2010では「プラットフォームツールセット」の設定によって、\Includeまで含めたパスが(内部的に)設定されるのでこの設定は不要となります。
$(MSSdk)\Include
ライブラリに関しては、Visual Studion 2010より前のバージョンでは、リンクするライブラリを「構成プロパティ」-「リンカー」-「入力」で次のように指定していましたが、
$(MSSdk)\Lib\wiaguid.lib $(MSSdk)\Lib\gdiplus.lib $(MSSdk)\Lib\comctl32.lib
Visual Studio 2010では「構成プロパティ」-「全般」-「プラットフォームツールセット」の設定にしたがってパスが設定されますので次のように「$(MSSdk)\Lib\」部分を削除してライブラリファイル名のみを設定します。
$(MSSdk)\Lib\wiaguid.lib $(MSSdk)\Lib\gdiplus.lib $(MSSdk)\Lib\comctl32.lib
ビルドを実行した時に「デバッグ情報が見つからない」というメッセージのエラーが発生することがあります。この問題は以下のようにプロジェクトを設定することで解決することができます。
C/C++の設定 | 「プロジェクト」-「プロジェクトのプロパティ」-「C/C++」-「全般」-「デバッグ情報の形式」を「/ZI」に設定します |
リンカの設定の設定 | 「プロジェクト」-「プロジェクトのプロパティ」-「リンカ」-「デバッグ」-「デバッグ情報の生成」を「/DEBUG」に設定します |
Windows SDK 7.1に入っているサンプルをVisual Studio 2010でビルドするにはプロジェクトを2010用に変換する必要があります。 これは.slnファイルを開けばVisual Studioが半自動でやってくれます。プロジェクトの変換後、ビルドしてみるとSDKのライブラリがリンクできません。プロジェクトのプロパティで「構成プロパティ」-「リンカー」-「入力」を調べるとリンカーの入力は次のようになってます。
$(MSSdk)\Lib\wiaguid.lib $(MSSdk)\Lib\gdiplus.lib $(MSSdk)\Lib\comctl32.lib
$(MSSdk)の設定が正しくないだろうということは簡単に想像できますが、$(MSSdk)とは一体何でしょうか? ビルドの設定で用いられるマクロの説明はmsdnのビルドのコマンドとプロパティのマクロにありますが、ここには$(MSSdk)の説明はありません。$(Macro)の書式で環境変数が参照できるのか?とも思いましたがそうでもないようです(NMAKEでは参照できますが)。 さらに調べてみると、$(MSSdk)はVisual Studion 2010の「構成プロパティ」-「全般」-「プラットフォームツールセット」を使って設定できることがわかりました。この設定を「Windows 7.1 SDK」(Windows SDK 7.1がインストールされているとこの項目が候補に現れます)に設定すると$(MSSdk)に適切なパスが設定されるらしいです。
ここからが少しややこしいのですが、実はこのままではサンプルはビルドできません。ライブラリが見つからないというエラーは依然発生します。いろいろと実験してみると、「構成プロパティ」-「リンカー」-「入力」には($(MSSdk)を適用するライブラリについては)ライブラリファイル名のみを指定すれば良いようです。
この例では以下のように「$(MSSdk)\Lib\」の部分を削除してライブラリファイル名だけを指定するとこでリンクエラーは解消されました。
wiaguid.lib gdiplus.lib comctl32.lib
SDKサンプルではSDKのヘッダファイルに関しても以下のようにパスを定義していますが、これもVisual Studion 2010では$(MSSdk)/Includeまでを内部的にサーチパスに加えるようで、この設定は削除しても問題なくビルドできます。
$(MSSdk)\Include