VC++6.0でうまくビルドできない時は


最近「VC++6.0でSDK編のイントロダクションをビルドしたがリンクエラーになります。」 というメールが、毎日のように寄せられます。 そのほとんどがプロジェクトの設定が間違っているか、 あるいは設定していないこと によります。

また、「デバッグ版」「リリース版」の違いについて知らない方も多数いらっしゃいます。 (16ビット時代のメモリーモデルについては名前も聞いたことがない人がいるのでは!?)

コンソールアプリケーションを作るときもプロジェクトを作ってください。プロジェクトを 作る癖をつけておくとSDK編に進んでもスムースにいきます。プロジェクトを作らずに ソースファイルをいきなりビルドしても自動的にコンソールアプリの設定で プログラムが作れますが、あとで困ることになります。

この説明を読んでもうまくいかない人は筆者にメールで問い合わせてください。 (VC++以外の人は質問されてもわかりません)

また、筆者にメールで問い合わせるときは 必要時以外はテキストのメールにしてください。 OutLook ExpressはデフォルトがHTMLメールになっています。「ツール」「オプション」 「送信」「メール送信の形式」を「テキスト形式」にしてください。


プロジェクトの作り方

メニューの「ファイル」「新規作成」を選択します。

すると下図のような「新規作成ダイアログ」が出現します。

コンソールアプリケーションを作るのであれば「Win32 Console Application」 SDKや手書きMFCのプログラムを作るのであれば「Win32 Application」を選択します。

プロジェクト名をつけます。これがアプリケーションの名前となります。 プロジェクト名を「abc」とすれば、出来上がるプログラムは「abc.exe」となります。

「OK」ボタンを押すとウィザードが出てきますが「空のプロジェクト」を作るに してください。(VC++5.0,4.Xではこのウィザードは出現しません)



「テキストファイルの新規作成」ボタンを押します。(赤丸印)

あるいは先ほどの「新規作成ダイアログ」の「ファイル」タブを 押して「C++ソースファイル」を選択してもよいです。 この場合「プロジェクトに追加」にチェックがあれば「プロジェクトへ追加」 の作業が省略できます。

何も記入されていないエディタが出てきますので、これにソース・コード (プログラム)を書き込みます。「ファイル」「名前を付けて保存」で 「abc.c」または「abc.cpp」というように拡張子がcまたはcppで保存します。 (ファイルのベース名をプロジェクトと同じにしておくと便利です。) 前者はC言語、後者はC++言語を表します。拡張子をcppにして中身を 全部C言語で書いても問題ありません。(逆は不可)

次に、「プロジェクト」「プロジェクトへ追加」「ファイル」で 先ほどの「abc.c(またはabc.cpp)」を選択します。(VC++4.Xではメニューの「挿入」 からファイルを追加します。)

「新規作成ダイアログ」の「ファイル」「C++ソースファイル」で ソースファイルを作った人はこの作業は不要です。



次に「リリース版」か「デバッグ版」のどちらのプログラムを作成するかを 決めます。前者は完成品、後者はまだ未完成でデバッグが必要な場合です。 しかし、デバッグをするのにデバッガを使わないのであればいきなり リリース版を作ってもかまいません。そのほうがビルド時間が短く HDDも節約になります。EXEもリリース版のほうがサイズも小さく、実行速度も 速いです。

これを設定するには「ビルド」「アクティブな構成の設定」で行います。

もっと簡単に設定するには2つ前の図で「Win32 Release」と書いてある コンボボックスで選択します。このツールバーが表示されていない人は、 「ツール」「カスタマイズ」「ツールバー」で「ビルド」にチェックをつけてください。

ここまでできたら後はビルドするだけです。

「F7」キーを押すか、「ビルド」「ビルド」を選択するか、もしくは 「ビルドボタン」を押します。

プログラムが出来上がってテスト運転をするときは、「ビルド」「実行」を 選択するか、「実行ボタン(!マークのやつ)」を押すか、「Ctrl+F5」キーを 押します。


さらに設定が必要な場合

手書きMFCをビルドするにはさらに設定が必要です。



「プロジェクト」「設定」で「一般」タブを選択します。

Microsoft Foundation Classを「 MFCのスタティックライブラリを使用」か 「共有DLLでMFC使用」を選択します。

前者は必要なものが全部EXEに入っているのでサイズがかなり大きくなります。 後者は共通DLLを使うのでEXEのサイズは小さくなります。 しかし、古いWindows95などでは新しいバージョンのDLLがないために、 動作しない可能性もあります。 (ユーザーがコンピュータに詳しい人であれば常に最新のDLLをインストールしているので 問題ないと思われます。)



次に「C/C++」タブを選択します。「カテゴリ」を「コード生成」にします。

「一般」で「MFCのスタティックライブラリを使用」を選択した場合は 「使用するランタイムライブラリ」 を「マルチスレッド」にします。

「共有DLLでMFCを使用」を選択した場合は 「マルチスレッド(DLL)」を選択します。




蛇足

(C言語に慣れている方には必要のないことなので読み飛ばしてください)

SDK編では、その章を書いたときの最新のVC++を用いています。したがって 章によって使われているVC++のバージョンが違います。
たとえばSDK編第49章までは、VC++4.Xを使用しています。 このため

WNDCLASS wc; ... wc.hbrBackground = GetStockObject(WHITE_BRUSH);

という表現がありますが、VC++4.Xの時代までは ワーニングも出ずにとおっていました。VC++5.0からはエラーになります。 型チェックが厳しくなったのです。エラーメッセージを読めば どこをどう直せばよいかすぐにわかると思います。 第50章からは型キャストをしているので、エラーは出ないはずです。

また、C言語編第57章で少しだけSDKのプログラムの話が 出ていますが、これはWin16時代のものです。

WinMain( HANDLE hInstance,HANDLE hPrevInstance, ....)

とありますが、32ビット版のVC++を使うと正しくビルドできません。 Win32では

WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance, ....)

というようにWinMain関数の引数の型が変更になっていますのでご注意ください。
[総合Index][メール]

Update 27/Sep/1999 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。