&size(9){Created By Uchan}; *Visual C++ コンパイラーをosa_dir2で使ってみた記録 OSASKアプリをC++で作りたくなって、GOのC++コンパイラーを使いました。しかし、それがうまく動かないことが発覚し、当初Min-GWを試そうと思いましたが、実はこれ、だめコンパイラーらしく、OSASKアプリを作るのは出来ませんでした。 ということで、VC++を使うことにしました。 **VC++って高くないの? まあ、買うと高いです。ウン千円です。 しか~~し、実はマイクロソフトから、Visual C++ Toolkit 2003というものが配布されているのです。これは、ビジュアルな開発環境は無いものの、まさしくVC++コンパイラーとリンカーがセットになったもので、ソースファイルがあれば、Visual C++ .NETと同じバイナリが出来ます。(バージョンによる些細な違いはあるでしょうけど。) 今回の、「osa_dir2でコンパイルする」目的には、これで十分(というか、ビジュアルな開発環境は意味ない)なので、[[早速ダウソ:http://msdn.microsoft.com/visualc/vctoolkit2003/]]。 **どうやってosa_dir2に組み込むか。 これが今回の最大問題だったのです。 まず、z_tools内のcom_mak.txtの CC1 = $(TOOLPATH)cc1.exe -I$(INCPATH) $(CC1OPT) -Os -Wall -quiet のしたの行に CL = $(VCToolKitInstallDir)bin\cl.exe -I$(INCPATH) /c と書き足します。 %.ca : %.c Makefile $(SJISCONV) $*.c $*.ca %.cpa : %.cpp Makefile $(SJISCONV) $*.cpp $*.cpa (これは無い場合がある) この2つ(1つの場合がある)それぞれを削除し、 %.obj : %.nas Makefile $(NASK) $*.nas $*.obj の下の行に %.obj : %.c Makefile $(CL) $*.c %.obj : %.cpp Makefile $(CL) $*.cpp の2つを書き足します。 そしたらcom_mak.txtは完成です。 ***お次はguigui00.hをいじる guigui00.hも少しいじらないといけないようです。 まず、42行目の//をはずします("//"だけを削除)。 次にguigui00.hの中の、extern __inline__関数を全て削除します。 具体的には、 extern __inline__ void ... { .... } というところを全て削除(externから } まで)します。 削除できたら、それをvcgg00.hという名前で保存します。 今度から、C++でアプリを書くときは、このvcgg00.hをextern "C"でインクルードします。 ** これをやれば、みんなもVC++を使って快適にC++プログラムをコンパイルできます。 **添付ファイルの情報 vcosadir.sar VC++コンパイラでのコンパイルに対応したcom_mak.txtとvcgg00.h。CとC++プログラムがコンパイルできる。~ com_mak.txtはこれまでのcom_mak.txtと入れ替えて使う。(再びGOのコンパイラを使いたくなったときに、入れ替える前のcom_mak.txtが必要になるので、ちゃんとそれも取っておくこと。) vcgg00.hは、guigui00.hと同じフォルダにコピーする。~ C++アプリを作るときは、guigui00.hのかわりにvcgg00.hをインクルードするようにする。 **追記2004.10.4 この設定だとライブラリが作れないなどの問題があるようです。それを解決するには、まずcl.exeにパスを通し、次に、com_mak.txtの CL = $(VCToolKitInstallDir)bin\cl.exe -I$(INCPATH) /c を CL = cl.exe -I$(INCPATH) -c とします。これで正常動作するはず。 パスの通し方は[[ここ:http://www.geocities.co.jp/CollegeLife-Library/2783/index.html]]を参照 **試行錯誤した結果ようやく実行できたはろーわーるど -ちなみにMLからダウンロードできるosa_dir2はcom_mak.txtのみの変更ですむようです(extern __inline__ void ... のくだりは存在せず)。 -VCを持ってる人は先にVCVARS32.BATを実行してからmakeするとパス等は全部面倒みてくれるようです。 /* "helloc4.cpp":helloをC++言語で記述した例 */ /* stack:4k malloc:1k */ /* このソースの説明が"helloc4.txt"に書かれています */ extern "C" { #include <guigui00.h> void OsaskMain(); } #define AUTO_MALLOC 0 class helloc4 { public: helloc4(); ~helloc4(); }; helloc4::helloc4() { struct LIB_WINDOW *window; struct LIB_TEXTBOX *wintitle, *textbox; /* ライブラリの初期化(必ず最初にやらなければならない) */ lib_init(AUTO_MALLOC); /* ウィンドウのオープン */ window = lib_openwindow(AUTO_MALLOC, 0x0200, 136, 48); /* ウィンドウタイトル用のテキストボックスをオープン */ wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0, 7, 1, 0, 0, window, 0x00c0, 0); /* "hello, world"を表示するためのテキストボックスをオープン */ textbox = lib_opentextbox(0x0000, AUTO_MALLOC, 0, 12, 1, 16, 16, window, 0x00c0, 0); /* ウィンドウタイトルを表示 */ lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "helloc4"); /* メッセージを表示 */ lib_putstring_ASCII(0x0000, 0, 0, textbox, 0, 0, "hello, world"); /* 終了 */ lib_waitsignal(0x0001, 0, 0); } helloc4::~helloc4(){} void OsaskMain() { helloc4 hello; } *こめんと(意見・質問・間違い指摘・その他何でも。) -introeみたいにライブラリを使おうとすると、エラーが出る。 -- ''uchan'' SIZE(10){2004-10-03 (日) 15:30:27} -やっぱVC++は不便な点が多いので、GOがバージョンアップしてC++の不具合が無くなるのを期待。 -- ''uchan'' SIZE(10){2004-10-03 (日) 17:01:06} -ライブラリ出来ました。VCにパスを通し、CL = cl.exe -I$(INCPATH) -c としました。 -- ''uchan'' SIZE(10){2004-10-04 (月) 07:16:28} -ものぐさな人に必要な処置を施したosa_dir2改をあげておきます。http://bayside.upper.jp/upload/osasksdk-20041005.lzh -- ''bayside'' SIZE(10){2004-10-05 (火) 22:01:17} #comment
(This host) = http://osask.net