Visual C++ Express EditionでFOX-Toolkitを使ってみる
Visual C++ Express Editionでネイティブアプリケーションを作成する際、Windows Platform SDKと共に利用します。 但し、MFCが利用できないため、GUIを作成するには Win32API を直接利用するか、または他のGUIライブラリを利用することが考えられます。 ここでは、GUIライブラリとしてFOX-Toolkitを利用してみます。
FOX-Toolkitのインストール
FOX-Toolkitの入手
FOX-Toolkit のホームページの ダウンロードページから Windows 95/98/ME/NT/2K/XP 用のFOX-Toolkitをダウンロードします。 ここでは STABLE である fox-1.6.20.zip をダウンロードします。
解凍
ダウンロードした fox-1.6.20.zip はZIP形式の圧縮ファイルですので、 それを適当なフォルダに解凍します。 ここでは、D:\fox-1.6.20 に解凍します。
ライブラリの作成
Visual C++ Express Edition 上でのビルド
fox-1.6.20.zip にはライブラリは含まれていませんので、ソースからコンパイルする必要があります。 コンパイルしてライブラリを作成する必要があります。 FOX-Toolkitには各コンパイラにあわせたビルド環境が用意されていますので、 Visual C++ Express Edition (+ Windows Platform SDK)を利用してビルドします。
Visual C++ Express Edition を起動します。
[ファイル]-[開く]-[プロジェクト/ソリューション]を選択します。
展開したフォルダの windows\vcpp\win32.dsw を 開きます。
以下のようなダイアログが表示されますが、[すべてはい]をクリックします。

右のソリューションエクスプローラに ソリューション'win32'(37プロジェクト)が表示されます。

ソリューション'win32'(37プロジェクト)をクリックし win32 ソリューションのプロパティを表示します。

スタートアッププロジェクトがadieになっており、デフォルトではアクティブ構成が Debug|Win32 となっています。 アクティブ構成を変更することにより、必要なライブラリ構成を選択します。
このまま、ビルドした場合、以下のようなコンパイルエラーとなり、後続のビルドが失敗します。
... vsscanf.cpp(403) : error C3861: 'vfscanf': 識別子が見つかりませんでした
これは、Visual C++ Express + Platform SDK ではvfscanf()が存在しないためだと思います。 エラーのあったソースを見ると以下のようになっています。
#if !defined(_MSC_VER) || (_MSC_VER < 1400) int vfscanf(FILE *stream,const char *format,va_list arg_ptr){ arg_scanf farg={(void*)stream,(int(*)(void*))fgetc,(int(*)(int,void*))ungetc}; return __v_scanf(&farg,format,arg_ptr); } #endif // API int vscanf(const char *format,va_list arg_ptr){ return vfscanf(stdin,format,arg_ptr); }
_MSC_VER < 1400 ではvfscanfが定義されるが、_MSC_VER が 1400 以上であれば定義されません。 Visual C++ 2005 Express Edition は _MSC_VER が 1400 なので、vfscanfが定義されないことになります。 これは、Visual C++ 2005 Express Edition でネイティブコンパイルを Platform SDK で行う場合に、Platform SDK にはvfscanfが含まれていないためと考えます。 (Standard Edition以上でネイティブコンパイルする場合は問題は発生しないはずです)
対処としてはソースを修正するかvfscanfを実装するか_MSC_VERを 1400 未満に設定するかが考えられます。
ソースを修正することは避けたいので、ここでは_MSC_VERを無理やり 1400 未満に設定することとします。
本コンパイルをしている箇所は fox プロジェクトと foxdll プロジェクトであるので、 ソリューションエクスプローラから fox プロジェクトを右クリックで選択し、「プロパティ」を表示します。
[構成プロパティ]-[C/C++]-[プリプロセッサ]を選択し、[プリプロセッサ定義]で "_MSC_VER=1300" を追加します。
同様に foxdll プロジェクトについても設定します。 本設定は構成毎にする必要がありますので、[Debug|Win32]と[Release|Win32]に設定します。
また、サンプルのプロジェクトである adie がリンクでエラーになります。DLLを利用する設定になっており、エラーになっていしまいました。 ライブラリ自体の作成に影響はありませんので、気にならなければ無視してください。 スタティックリンクの設定にすれば、問題なくコンパイルできます。
スタティックリンクの設定にするには、 [構成プロパティ]-[C/C++]-[プリプロセッサ]を選択し、[プリプロセッサ定義]で "FOXDLL" を削除します。 また、右ペインの adie プロジェクトのプロパティで、プロジェクトの依存関係がfoxdllになっていますので、foxにします。


では、ビルドを行います。 ソリューション'win32'(37プロジェクト)を右クリックで[ソリューションのビルド]を選択するとビルドが開始されます。 警告は出力されますが、数分後に以下のように完了します。

[Debug|Win32]の構成のスタティックライブラリが作成されました。 必要に応じてアクティブ構成を[Release|Win32] に変更して上記の[ソリューションのビルド]を実行します。 ライブラリはそれぞれ別名で作成されますので予め作成しておけばよいです。 作成したライブラリはインストールフォルダのlibに作成されます。
Foxアプリケーションの作成
プロジェクトの作成
では、Visual C++ Express Edition で FOX-Toolkit を使用した簡単なアプリケーションを作成してみましょう。
[ファイル]-[新規作成]-[プロジェクト]から[新しいプロジェクト]ウインドウを表示します。
プロジェクトの種類ツリーから[Visual C++]-[Win32] をクリックします。
Visual Studio にインストールされたテンプレートより[Win32 コンソール アプリケーション] をクリックし、 プロジェクト名に名前を入力し、[OK]ボタンをクリックします。
[Win32 アプリケーション ウィザード]ウインドウが表示されます。

[次へ>]をクリックします。

アプリケーションの種類に[Windows アプリケーション]を選択し、 追加オプションに[空のプロジェクト]をチェックし、[完了]をクリックします。
プロジェクトが生成されます。
ソースの作成
ソースファイルを右クリックで[追加]-[新しい項目]を選択し、 新しい項目の追加ウインドウで[C++ファイル(cpp)]を選択し、ファイル名を入力し、[追加]をクリックします。

エディタで以下のように FOX-Toolkitを利用してウインドウを表示するコードを記述し、保存します。
#include "fx.h" int main(int argc,char **argv) { FXApp application("ApplicationName","VendorName"); application.init(argc, argv); FXMainWindow* main = new FXMainWindow(&application, "FoxSample", NULL, NULL, DECOR_ALL, 0, 0, 600, 400); application.create(); main->show(PLACEMENT_SCREEN); return application.run(); }
ここではコード内容の説明については記載しません。
プロジェクトの設定
FOX-Toolkit のインクルードファイルやライブラリを参照するように設定します。
ソリューションエクスプローラのプロジェクトを右クリックし[プロパティ]を選択します。
[構成プロパティ]-[C/C++]-[全般]をクリックします。 追加のインクルードディレクトリに展開ディレクトリ下のincludeを追加します。

[構成プロパティ]-[リンカ]-[全般]をクリックします。 追加のライブラリディレクトリに展開ディレクトリ下のlibを追加します。

[構成プロパティ]-[リンカ]-[入力]をクリックします。 追加の依存ファイルに[foxd-1.6.lib]を追加します。
Debugビルドしたスタティックライブラリはfoxd-1.6.lib、 Releaseビルドしたスタティックライブラリはfox-1.6.libとなっています。

[構成プロパティ]-[リンカ]-[詳細]をクリックします。 エントリポイントに mainCRTStartup を入力します。
これは、エントリポイントをWinMain()の代わりにmain()を使うことをリンカに指示します。

[OK]をクリックします。
ビルドと実行
ソリューションをビルドし、デバック開始で実行すると以下のようなウインドウが表示されます。
