次のページ 前のページ 目次へ

8. 初めてのビルド、初めてのエラー

まだ画面の外側を作ってみただけで何の処理も、 更には牌の表示すらも無い状態ですが、 C言語で書く以上、中途半端なところではコンパイルできませんから、 この段階でコンパイルして moreソフト を作ってみましょう。 ザウルスに画面が表示されるだけでも嬉しいものです(^^)。

8.1 ビルドとリビルド

テキストで書かれたプログラムを実行可能な形式に (正確にはバイナリオブジェクトに)変換する事をコンパイルと呼び、 こうして出来たオブジェクトファイル群とライブラリとをまとめて 実行可能ファイルを作る事をリンクと呼びます。 SZABの統合開発環境においては、 コンパイル・リンクに加えてリソース生成・アーカイブなどを行い ザウルスで実行可能なmoreソフト(ZACファイル)を作り出す事を ビルドと呼びます。 SZABのメニューで言うと、そのものずばりで[ビルド]ですね。

ところでビルドリビルドの違いですが、 これは前者が変更された分だけをコンパイルするのに対し、 後者は全てのファイルをコンパイルし直すというものです (正確には作成した物を消去してから全部作り直すのがリビルド)。 通常は前者のビルドだけで済みますが、 ソースファイルではなくヘッダファイルの変更や、 リソースの追加・変更・削除などを行った後には、 後者を選んで再作成(re-build)しないとうまくいかない場合があります。

ビルド				通常の開発時(ソースの編集とビルドの繰り返し)
リビルド			構成ファイル等大きな変更があった時の全コンパイル
リソースのみ生成		ビルド作業の内、文字列や画像といったリソースのみの作成
ビルド生成物の削除		生成されたファイル群の消去(make clean ね)
ソースファイル再スキャン	本prj.に関わるソースファイルの再検出
リソースファイル再スキャン	本prj.に関わるリソースファイルの再検出
大雑把には、 プロジェクトを構成するファイル(ソース、ヘッダ、リソース、フォーム他)への 追加・削除・修正が入った場合は ビルド生成物の削除 と リビルドを、 ソースや画面の修正を行っただけの場合は ビルド を使うといった程度の認識で結構です。

8.2 初回ビルド

第1回目のビルドでは、リソース生成から何から全てを行う必要がありますので、 必ず ビルド生成物の削除 と リビルド を行ってください。 これらの作業中は、生成状況の表示とエラーの表示などの為に アウトプットウィンドウが開きます。 上記の操作を実行すると、たくさんのメッセージが流れていくのが判るでしょう (何かエラーがあった場合は、色付き文字で表示されます)。

8.3 多重定義エラー

さて今回の場合ですが・・・あらら、SearchStrID で多重定義があった とか言われちゃいましたね。 文字列エディタでは重複する名前は作ってないはずなのになぜでしょう? この他にも下の方にマクロが再定義されてるとか一杯出ています。 当然ビルドも失敗しています・・・。

アウトプットウィンドウの抜粋

悩ませても仕方がないので種を明かしますと、 実はこれ今回使った SearchStrID というシンボルが 既にSZABの方で使われている名前だったために、 『同じ名前で別な物が登録されていますよ』と注意されたんです。

このように心当たりが無いのにシンボルの多重定義だと言われる時は、 システムで定義されている可能性を疑いましょう。 しっかり調べたい方は、SZABのインクルードファイルを見てみると良いのですが (通常は、c:\szab\libheader\c\*.h です)、 ともかく、識別子(リソースID等) はアプリケーション内だけでなく、 SZABの開発環境の中でも一意に定まらないといけないと覚えましょう。

8.4 多重定義問題の解決

さて、この場合の解決策ですが、 当然の事ながら SearchStrID (最後の ID は SZAB が自動で付けたものです)のシンボル名を変更してあげればいいわけです。 wst3SearchStr なんてどうでしょう?これだったら絶対大丈夫ですね。 そう、アプリケーション識別子は唯一性が保証されるので、 こうやればぶつかる心配は無くなるのです。

しかしここで注意が1つ! 実は文字列エディタの方を先に直してしまうと、 フォームエディタで GameForm が開けなくなってしまうのです(^^;。 フォームエディタは指定されたフォームを開く際、 表示の為に使用されてるリソースの存在を確認するのですが、 文字列エディタで SearchStr を wst3SearchStr に書き換えてしまうと、 それが見つからずエラーになってしまうからです。

ですので、先にそのリソースを使っているボタン等を一時的に変更してから、 文字列エディタの方を修正してあげれば良いわけです (なお、万が一開けなくなった場合、 直接プロジェクトディレクトリ下の該当コントロールをエディタで編集すれば復旧できます)。

今回の場合、GameForm の GameSearchBtn で SearchStr を使っていましたので、 フォームエディタを起動して GameSearchBtn の構成部品 CHARBTNDATA(1) のプロパティを表示し、 ICON_RES_ID_PID の値を SearchStr から 一旦別な物にして保存してください。

ICON_RES_ID_PIDプロパティの書き換え ※ SearchStr を一旦別なもの(HelpStr等)に変更して保存

その後、文字列エディタで先の SearchStr を wst3SearchStr に書き換えて保存し、 再度フォームエディタで wst3SearchStr を選び直してやれば良いわけです。

8.5 そしてビルド完了

リソースIDの変更など、ちょっとごちゃごちゃやりましたので、 [ビルド]の[ビルド生成物の削除]を選んでから[リビルド]を行ってください。

さて、うまくエラーもなくビルドできたでしょうか? できたなら早速ザウルスに転送して動かしてみましょう。 今作ったソフトは終了処理がありませんので、 more管理画面から停止を選んでやらないと終わりませんが、 それでも、少しでも動いて画面が出ると何となく嬉しいものです。

何にも作ってはいませんが、それでもとりあえず画面を出すところまでは来ました。 これから先、急に動かなくなったとしても、 まずこの時点までは正常だと言えますよね。

こうして所々で動作を確認しながら、今後の開発を進めていきましょう。


次のページ 前のページ 目次へ