このページの内容 |
---|
新規ソースファイルを追加する |
既存のファイルを追加する |
複数プロジェクトの利点 |
プロジェクトのファイルを削除 |
まとめ |
ありがたいスポンサー様 |
---|
All About ソフトウエアエンジニア |
ネットで8%割引!自動車保険はアメリカンホーム・ダイレクト |
人生の「チャンス」と「ピンチ」にモビット! |
保険料が一生上がらない、保険料最大50%割引の一生涯の医療保険! |
ここから読み始める人は前回までの結果(32.2KB)をダウンロードすることをおすすめします。準備ができたら、helloworldプロジェクトにソースファイルを追加してみます。メニューの『ファイル→新規作成』を選択すると、次のようなウインドウが表示されると思います。
ソースファイルの追加
簡単ですね。しかし、この方法では新規ソースファイルしか追加できません。既存のファイルや他のエディタで作成したファイルの追加方法は次で説明します。
その前に、aboutbox.cppに次のように入力してください。さらに、helloworld.cppの一番最後にあるAbout関数の定義部分を削除しておいてください。実は、helloworld.cppにあったAbout関数をaboutbox.cppに移動しただけです。
#include "StdAfx.h" // バージョン情報ボックス用メッセージ ハンドラ LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL ) { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; } return FALSE; }
何をしたかったかというと、バージョン情報ダイアログのプロシージャを別のソースファイルに移動させたかったんです。それぞれのダイアログごとに定義部分を別のファイルに分けるのは常套手段です。プロジェクトのファイル数が増えてきても、「このダイアログの内容、どこで定義してたっけなぁー?」と悩む時間が短縮され、効率が下がらないという利点があります。こんなちっちゃなアプリケーションで示してもピンとこないかもしれませんが、「こういう風にして作業するんだなぁー」と思っておいてください。
さぁ、helloworldプロジェクトをビルドしてみてください。helloworldプロジェクトがちゃんとアクティブプロジェクトに設定されているか確認して下さいね。アクティブプロジェクトって何やねん…っていう人は、ちゃんとアクティブプロジェクトと構成を読み直して下さいね♪
ビルドできたら実行してみましょう。実行しても、前と代わり映えしなくてつまらないですが、勘弁して下さい(^^;
既存のファイルをプロジェクトに追加する方法を説明します。これは例えば次のような場合に有用です。
空のtestプロジェクトにファイルを追加してみましょう。まず、FileViewの testプロジェクトを表す 『testファイル』 を右クリックして、メニューから 『ファイルをプロジェクトへ追加』 を選択して下さい。
ファイルをプロジェクトへ追加を選択
表示されたダイアログから、aboutbox.cpp , helloworld.rc , resource.hを選択して開くボタンを押して下さい。Ctrlキーを押しながらクリックすれば複数選択できます。
追加するファイルを選択
FileViewを見れば、追加されたファイルが表示されていますね。ちゃんと拡張子ごとにフォルダを分けて追加してくれています。
追加されたファイル
次のことに注意しておいて下さい。
引っ張りに引っ張ってきた1つのワークスペースに複数のプロジェクトを挿入することの利点を説明します。その前に、testプロジェクトを完成させてしまいましょう。testプロジェクトにtest.cppを挿入して次のように記述して下さい。
#include <windows.h> #include "..\resource.h" LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) ; int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hInstPrev, LPSTR lpCmdLine, int intCmdShow) { DialogBox( hInst, MAKEINTRESOURCE( IDD_ABOUTBOX), NULL, (DLGPROC)About) ; return 0; }
ビルドして実行してみましょう。『バージョン情報』 のダイアログが表示されましたね。test.exeはバージョン情報を表示するだけのダイアログアプリケーションです。
test.exeは、helloworld.exeと同じダイアログプロシージャを使って、『バージョン情報』のダイアログを表示しています。こうすることは、表示するダイアログが複雑で、正常に動作するか確認したいときに有用です。
ダイアログに限らず、作成中のアプリケーションの一部分が正常に動作するかを確認したいことはよくあります。全ての部分を書き終えてからビルドする方法は効率的ではありません。プログラムのそれぞれの部分が、まず正常に動いていることを確認して、最後にそれぞれの部品を組み合わせるのがよいでしょう。また、完全なアプリケーションを作ってからも、デバッグの段階で一部分を取り出して動作検証する場合にもこのような方法は便利です。もちろん、VC++にはデバッグの機能もありますが、自分で簡単なソースを書いた方が複雑なデバッグをできます
testプロジェクトからaboutbox.cppを削除してみましょう。FileViewでaboutbox.cppを選択して、 『メニューの編集→削除』 を選んで下さい。単に 『delete』 キーを押すだけでもOKです。ただし、プロジェクトから削除しても実際のファイルシステム上からaboutbox.cppが削除されたわけではないことに注意して下さい。あくまでVC++のプロジェクトのツリー構造からaboutbox.cppが削除されるだけです。実際にaboutbox.cppを削除したい場合は、エクスプローラーから削除して下さい。
さて、aboutbox.cppがプロジェクトにない状態でビルドするとどうなるでしょう。次のように表示されました。
--------------構成: test - Win32 Release-------------- コンパイル中...test.cpp リンク中... test.obj : error LNK2001: 外部シンボル ""long __stdcall About(struct HWND__ *,unsigned int,unsigned int,long)" (?About@@YGJPAUHWND__@@IIJ@Z)" は未解決です Release/test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー test.exe - エラー 2、警告 0
コンパイルはできるけど、リンク時にエラーとなりました。このようなエラーにも対処できるように、次のページでは 『ビルドの仕組み』 について解説します。次のページを読めば、このエラーの理由も分かるはずです。
複数プロジェクトを作ることの利点は次のようなものがあります。
3つ目に関しては、ここでは詳しく解説しません。そのうち解説したいですが。