VC++2005ExpressEditionでBayGUI
VC++ 2005 Express Editionを入れてみたのでとりあえずSDL版BayGUIをコンパイルしてみた。手順を残しておく。
(01) CVSからlibbayguiのtarボール*1を取得。
(02) E:\project\Mona\libbayguiに展開。
(03) てきとーにMakefileを書く。awt\TextArea.cppとlang\Thread.cppはエラーが出るので外す。
//Makefile_SDL # TARGETEXE = main.exe TARGETLIB = baygui.lib SOURCES = \ awt\Button.cpp \ awt\Checkbox.cpp \ awt\CheckboxGroup.cpp \ awt\Component.cpp \ awt\Container.cpp \ awt\FontMetrics.cpp \ awt\Frame.cpp \ awt\Graphics.cpp \ awt\Image.cpp \ awt\Label.cpp \ awt\ListBox.cpp \ awt\Scrollbar.cpp \ # awt\TextArea.cpp \ awt\TextField.cpp \ awt\Window.cpp \ lang\Object.cpp \ lang\String.cpp \ # lang\Thread.cpp \ util\Hashtable.cpp \ util\Vector.cpp OBJECTS = $(SOURCES:.cpp=.obj) SDLHOME = D:\Lib\SDL-1.2.9 INCLUDE = \ /I. \ /Ibaygui \ /I"$(VCINSTALLDIR)"\INCLUDE \ /I$(SDLHOME)\include LIBS = \ /LIBPATH:$(SDLHOME)\lib \ SDL.lib \ SDLmain.lib # LD = link AR = lib .SUFFIXES : .obj .cpp all : $(TARGETEXE) $(TARGETEXE) : $(TARGETLIB) $(CPP) /Fe$@ $(INCLUDE) $(@:.exe=.cpp) $(TARGETLIB) /link $(LIBS) $(TARGETLIB) : $(OBJECTS) $(AR) /OUT:$@ $(OBJECTS) .cpp.obj : $(CPP) /c /Fo$@ $(CPPFLAGS) $(INCLUDE) $< clean : del $(OBJECTS) $(TARGETLIB) $(TARGETEXE)
(04) Make。
E:\project\Mona\libbaygui>nmake /f Makefile_SDL Button.cpp awt\Button.cpp : warning C4819: ファイルは、現在のコード ページ (932) で表示 できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式 で保存してください。 .\baygui.h(42) : fatal error C1083: include ファイルを開けません。'monapi.h' :Invalid argument (略)
(05) ソースはUTF-8で書かれているがどうもコンパイラが正しく解析できないみたい。他のコードに変換すればコンパイルされるが、それではBayGUIで日本語等を表示したときに文字化けすると思われる。悩ましいところ。ヘッダファイルのエラーメッセージはMONA用の定義が有効であったため。
//baygui.h 27: // ================================================== 28: // OS 定義部分 29: // ================================================== 30: #define MONA 1 31: //#define SDL 1
(06) SDL用の定義を有効にする。
//baygui.h 30: //#define MONA 1 31: #define SDL 1
(07) 文字コードはとりあえずMS932に変換することに。昔ながらのnkf*2を愛用。
E:\project\Mona\libbaygui>for /r %i in (*.cpp) do nkf --sjis --cp932 --overwrite %i
(08) 再度Make。
E:\project\Mona\libbaygui>nmake /f Makefile_SDL Button.cpp e:\project\mona\libbaygui\baygui_SDL.h(63) : error C3409: 空の属性 ブロックは認められません。
(09) エラー箇所はここ。ぜんぜん大丈夫じゃん…。
//baygui_SDL.h 62: bool __internal2; 63: char __reserved[64]; 64:} guiserver_window;
(10) grepしてみたらVC++付属のヘッダファイルに__reservedがマクロ定義されているのを発見。
//sal.h 701:#define __nullnullterminated 702:#define __reserved __pre __null 703:#define __checkReturn __inner_checkReturn
(11) #undefしても平気そうだけど、とりあえず変数__reservedは使ってないみたいなので変数名を変える。
//baygui_SDL.h 62: bool __internal2; 63: char _reserved[64]; 64:} guiserver_window;
(12) 更にMake。
E:\project\Mona\libbaygui>nmake /f Makefile_SDL
(13) 無事終了したので実行。
E:\project\Mona\libbaygui>main awt\FontMetrics.cpp:baygui::FontMetrics::FontMetrics:60:ERROR: can not get font!
(14) フォントがないと怒られる。MONA12.MNF*3と、ついでに標準の背景画像MONAWALL.BMP*4をゲット。
(15) 再度実行。
E:\project\Mona\libbaygui>main
(16) ウィンドウが表示される。
IDE使わなかったので何が変わったのかぜんぜんわかってないよ…。