EzGraph-Win32 使用説明書

Ver0.30
2016.1.12
大野 和彦

目次


はじめに

EzGraph-Win32(以下、本ライブラリ、またはWin32版と呼ぶ)は、 簡単グラフィックス・ライブラリEzGraph(以下、オリジナル版と呼ぶ) と同等の機能をWindows上で実現したものです。 EzGraphを利用して作成したCプログラムのソースを、 本ライブラリと合わせてWindows上で再コンパイルすることで、 Windows上で動作する実行プログラムが作成できます。

また、 通常Unix系OSだけで用意されている関数の一部(の不完全な実装)も提供し、 これらの関数を使用しているプログラムもコンパイルできるようにしています。 以下、これらの関数をUnix互換関数と呼びます。

本ライブラリの実装にはWin32 APIだけを用い、 MFCなどのライブラリは使っていません。 このため、 Visual C++ 2010 Express Editionのように無償で利用できるWindows用コンパイラでも、 ビルドが可能です。

なお、 現時点では以下の環境のみテストしています。


使い方

作成したいプログラムが一つだけであり、 EzGraphの関数とCの標準ライブラリ関数しか使用していない場合は、 以下の手順でお手軽にビルドできます。

  1. 本ライブラリに含まれる EzGraph.h, rgb.c, EzGraph.c および、作成するプログラムのソースファイル (仮に prog.c とします)を、同じディレクトリに入れます。
    Unix環境からソースファイルを持ってきた場合は、 文字コードをEUCからShift-JISやUTF-8などに変換しておいてください (どちらに変換するのが良いかはOSやコンパイラ、 対象プログラムにより異なりますが、 UTF-8はEUCと文字列のバイト数が異なってくるため、 問題を生じる可能性が高いです)。 文字コードを変換するフリーソフトはVectorなどに多数あります。
  2. 以下のようにしてコンパイルします。
    • Visual C++ 2010 Express Editionの開発環境を使う場合
      1. 「ファイル」→「新規作成」→「既存のコードからプロジェクトを作成」 と選び、 「プロジェクトファイルの場所」に作成したディレクトリを指定します。 これで、 ディレクトリ内のソースすべてが登録されたプロジェクトが作成されます。
      2. このプロジェクトが開かれた状態で、 「プロジェクト」→「XXX のプロパティ」 (XXX はプロジェクトにつけた名前) と選んで出てくるプロパティのページで、 以下の設定を行います。
        • 「構成プロパティ」→「C/C++」→「全般」と選び、 右側の一覧にある「追加のインクルードディレクトリ」 にプロジェクトのディレクトリを追加します。
      3. 後はメニューからビルドしてください。
      他のバージョンのVC++でも、 同要の手順でプロジェクトを作成できると思います。
    • コマンドライン用のコンパイラの場合
      このディレクトリ下に移動して、 cc -I. EzGraph.c rgb.c prog.c のように入力してください。 なお、 cc の部分は使っているコンパイラのコマンド名 (Borland C++ならbcc32) に置き換え、 他に必要なオプションがあれば、 適時指定してください。 本ライブラリはWindowsのWin32 APIを利用していますので、 何らかのオプションまたはライブラリの指定が必要かもしれません。

以下の場合は、 本ライブラリのソースだけをライブラリとしてビルドし、 作成したいプログラムからリンクして使用する方が便利です。

この場合は、以下のようにしてビルドします。

  1. 本ライブラリのアーカイブファイルを、 ディレクトリつきで展開します。 この結果、 EzGraph-Win32 というディレクトリが作成され、 その中にソースファイル一式が展開されます。
  2. 以下のようにしてコンパイルし、ライブラリをビルドします。
    • Visual C++ 2010 Express Editionの開発環境を使う場合
      1. 「ファイル」 →「新規作成」 →「既存のコードからプロジェクトを作成」 と選び、 「プロジェクトファイルの場所」を上記ディレクトリ、 「プロジェクト名」を「EzGraph」に設定し、 新規プロジェクトを作成します。
      2. 「プロジェクト設定の指定」 で 「プロジェクトの種類」 を 「スタティックライブラリ(LIB)プロジェクト」 に変更します。
      3. 「デバッグ構成の設定の指定」 で 「インクルード検索パス」 に 「.」 を追加します。
      4. プロジェクトをビルドすると、 EzGraph.lib が生成されます。
    • Visual C++ 2008 Express Editionの開発環境を使う場合
      1. 「ファイル」 →「新規作成」 →「既存のコードからプロジェクトを作成」 と選び、 「プロジェクトファイルの場所」を上記ディレクトリ、 「プロジェクト名」を「EzGraph」に設定し、 新規プロジェクトを作成します。
      2. 「プロジェクト」 →「プロパティ」 と選んでプロパティページを開き、以下の設定を行います。
        • 「構成プロパティ」 →「全般」と選び、 右側の「構成の種類」を「スタティックライブラリ(lib)」 に変更します。
        • 「構成プロパティ」 →「C/C++」 →「全般」と選び、 右側の「追加のインクルードディレクトリ」に 「.」を追加します。
      3. プロジェクトをビルドすると、 EzGraph.lib が生成されます。
    • Borland C++ 5.5.1コマンドライン版を使う場合
      ディレクトリ内に用意されている Makefile.bccMakefile に名前変更してから、 makeしてください。
  3. このライブラリを利用するには、以下のようにします。
    • Visual C++ 2010 Express Editionの開発環境を使う場合
      ライブラリを使用したいプロジェクトで「プロジェクト」 →「プロパティ」 と選んでプロパティページを開き、以下の設定を行います。
      • 「構成プロパティ」 →「C/C++」 →「全般」と選び、 右側の「追加のインクルードディレクトリ」に ライブラリのディレクトリ(EzGraph.hのある場所) を追加します。
      • 「構成プロパティ」 →「リンカ」 →「全般」と選び、 右側の「追加のライブラリディレクトリ」に EzGraph.libのあるディレクトリを追加します。
      • 「構成プロパティ」 →「リンカ」 →「入力」と選び、 右側の「追加の依存ファイル」に EzGraph.libおよび ShLwApi.libを追加します。
    • Visual C++ 2008 Express Editionの開発環境を使う場合
      ライブラリを使用したいプロジェクトで「プロジェクト」 →「プロパティ」 と選んでプロパティページを開き、以下の設定を行います。
      • 「構成プロパティ」 →「C/C++」 →「全般」と選び、 右側の「追加のインクルードディレクトリ」に ライブラリのディレクトリ(EzGraph.hのある場所) を追加します。
      • 「構成プロパティ」 →「リンカ」 →「全般」と選び、 右側の「追加のライブラリディレクトリ」に EzGraph.libのあるディレクトリを追加します。
      • 「構成プロパティ」 →「リンカ」 →「入力」と選び、 右側の「追加の依存ファイル」に EzGraph.libおよび ShLwApi.libを追加します。
    • Borland C++ 5.5.1コマンドライン版を使う場合
      1. 同コンパイラのリンカの設定ファイル ilink32.cfg (デフォルト設定でインストールしていれば、 c:\borland\bcc55\Bin にあります)を修正し、SDKライブラリを検索パスに追加します。
        たとえば、同設定ファイルの内容が
        -L"c:\Borland\Bcc55\lib"
        のようになっている場合、以下のように変更します。
        -L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK"
      2. 本ライブラリを利用してコンパイルするには、 以下のようにオプション・引数を指定します。
        • -I オプションにより、 インクルードファイルの検索パスに、 本ライブラリのディレクトリを含めます。
        • -L オプションにより、 ライブラリの検索パスに、 本ライブラリのディレクトリを含めます。
        • コンパイル時の引数に EzGraph.lib, shlwapi.lib を追加します。
        たとえば sample.c をコンパイルするには、 以下のようにします (本ライブラリへのパスは適時変更してください)。
                          bcc32 -I../EzGraph-Win32 -L../EzGraph-Win32 sample.c EzGraph.lib shlwapi.lib
                          

バグと制限事項

オリジナル版に対し、 Win32版の現バージョンでは、 以下のバグや制限事項・挙動の違いが存在します。


拡張機能

ユーザの同じソースコードからUnix/Windows用実行ファイルを作れるように、 ライブラリ関数群のインタフェースや挙動に関しては、 Win32版はオリジナル版と可能な限り同じにしています。 一方、Win32版には以下の実行時機能が拡張されています。


Unix互換関数

現バージョンで提供するUnix互換関数とその制限事項は、 以下のとおりです。


よくある(かもしれない)質問と解答

このライブラリを使うと、 自宅のWindows環境でプログラム開発ができますか?

多少の修正は問題ないと思いますが、 Windows上で本ライブラリを使ってEzGraph用プログラムを一から開発することは、お勧めしません。

本ライブラリは、 オリジナル版の環境で作成したプログラムを、 Windows上でも動かせるようにすることが目的です。 したがって、 オリジナル版用に作成したプログラムをWindows上で(無修正で)コンパイルでき、 実行時の挙動も再現できることを目指しています。 逆にWindows環境下で作成したプログラムをオリジナル版に持ち込む場合の配慮はしていません。

具体的には、Windows上ではスムーズに動いていたプログラムが、 オリジナル版環境では遅くてまともに動かない、 気づかずにWindows固有の関数を呼び出しており、 オリジナル環境ではコンパイルできない、 などのトラブルが予想されます。 こうした問題に対処するスキルがなければ、 開発作業はオリジナル版で行うようにしてください。

また、授業と関係なしに趣味でWindows用プログラムを開発したいのであれば、 フリーのものも含めWindows独自のライブラリがいろいろ存在しますので、 そちらを使った方が良いでしょう。 こうしたライブラリであれば、EzGraphや本ライブラリがサポートしない機能 (音楽・効果音の再生など)も使えます。

EzGraphで作成したプログラムは、 なんでもWindowsで動かせますか?

現時点ではバグや制限事項があり、 完全にオリジナルと同等にはなっていません。

また、Unix固有の関数(EzGraphの関数でも、 Cの標準ライブラリ関数でもないもの)を使っていると、 同等の関数がWindowsに用意されておらず、 コンパイルできない場合があります。

オリジナル版の環境では正常にコンパイルできたのに、 Windows環境で本ライブラリを使ってコンパイルするとエラーになります。

printf()が使えません

scanf()が使えません

printf(), scanf() などの関数は(標準ライブラリ関数なので) Windows環境にも用意されており、 これらの関数を使ったプログラムも正常にビルドできます。 しかし、 Windowsアプリとしてビルドするとコンソールが表示されないため、 これらの関数は実際には動作しません (コマンドプロンプトから実行しても、 同プロンプトを標準入出力のターミナルとしては使ってくれません)。 printf()などの出力関数は出力内容が表示されないだけですが、 scanf()などの入力関数は入力内容をユーザが入力できないため、 致命的な不具合となります。

本ライブラリでは、 メニューバーから「表示」→「コンソール」と選択すると、 コンソールウィンドウを開くことができます。 printf(), puts() については、このウィンドウ上に表示するようにしています (その他の標準出力関数については未実装です。需要があれば実装します)。 日本語も出力可能ですが、行末の折り返しで2バイト文字を考慮していないため、 一部文字化けすることがあります(将来修正予定)。

scanf() についても、将来的にはこのウィンドウ上で入力できるようにする予定です。

コンソールウィンドウを表示しても、 printf() の結果が出力されません

ユーザのソースファイルが複数に分かれている場合、 各ファイルのうち printf(), puts() を使っているものについては、 EzGraphの関数を呼び出していなくても EzGraph.h をインクルードしてください。

コンソールウィンドウへの出力は専用の関数を呼び出す必要があり、 EzGraph.h で定義されたマクロにより、 printf(), puts() をこの関数に置き換えるようになっているためです。

オリジナル版では、EzGraphの関数を呼び出していないCソースファイルで EzGraph.h をインクルードする必要はありませんが、 Win32版に合わせてインクルードしても実害はありません。 また、 オリジナル版で開発された EzGraph.h をインクルードしていないソースファイルをWin32版でコンパイルしても、 コンソールウィンドウに出力されない以外の問題はありません。

Visual C++でコンパイルした実行ファイルを友達に渡したのですが、 エラーが出て動きません。

VC++が生成する実行ファイルは、 デフォルトでは実行時にDLLを使うようになっているようです。 VC++をインストールしたPCにはこのDLLもインストールされていますが、 VC++をインストールしていないPCに生成した実行ファイルを持って行くと、 DLLがないので動きません。

コンパイルは正常にできましたが、 実行するとウィンドウが出ずに画面全体が点滅します。

コンソールアプリとしてビルドしている可能性があります。 Visual C++の場合はプロパティページの左側で、 「構成プロパティ」 →「リンカ」 →「システム」と選び、 右側の項目「サブシステム」を「Windows」にしてください。 borland C++の場合は -W オプションをつけてコンパイルしてください。

gccでは -Wall オプションをつけてコンパイルして警告が一つも出ないのに、 Visual C++でコンパイルすると山のような警告が出ます。

Visual C++はデフォルトでかなりチェックが厳しくなっています。


おわりに

バグ報告、改善意見等は、 大野(ohno@cs.info.mie-u.ac.jp)までお願いします。

なお、本ライブラリは個人的な趣味で作成したものであり、 授業用の正規の教材として提供・保守するものではありません。 バグ修正や要望への対応はできる限り行いますが、 一定期間内にできる保障はありませんので、 御了解ください。


開発履歴