ページへ戻る

+ Links

 印刷 

VC++ONosa_dir2 :: OSASK計画

osaskwiki:VC++ONosa_dir2

Created By Uchan

Visual C++ コンパイラーをosa_dir2で使ってみた記録

OSASKアプリをC++で作りたくなって、GOのC++コンパイラーを使いました。しかし、それがうまく動かないことが発覚し、当初Min-GWを試そうと思いましたが、実はこれ、だめコンパイラーらしく、OSASKアプリを作るのは出来ませんでした。
ということで、VC++を使うことにしました。

Page Top

VC++って高くないの?

まあ、買うと高いです。ウン千円です。

しか~~し、実はマイクロソフトから、Visual C++ Toolkit 2003というものが配布されているのです。これは、ビジュアルな開発環境は無いものの、まさしくVC++コンパイラーとリンカーがセットになったもので、ソースファイルがあれば、Visual C++ .NETと同じバイナリが出来ます。(バージョンによる些細な違いはあるでしょうけど。)
今回の、「osa_dir2でコンパイルする」目的には、これで十分(というか、ビジュアルな開発環境は意味ない)なので、早速ダウソ

Page Top

どうやって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は完成です。

Page Top

お次はguigui00.hをいじる

guigui00.hも少しいじらないといけないようです。

まず、42行目の//をはずします("//"だけを削除)。

次にguigui00.hの中の、extern __inline__関数を全て削除します。

具体的には、

extern __inline__ void ...
{
    ....
}

というところを全て削除(externから } まで)します。
削除できたら、それをvcgg00.hという名前で保存します。

今度から、C++でアプリを書くときは、このvcgg00.hをextern "C"でインクルードします。

Page Top

これをやれば、みんなもVC++を使って快適にC++プログラムをコンパイルできます。

Page Top

添付ファイルの情報

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をインクルードするようにする。

Page Top

追記2004.10.4

この設定だとライブラリが作れないなどの問題があるようです。それを解決するには、まずcl.exeにパスを通し、次に、com_mak.txtの

CL       = $(VCToolKitInstallDir)bin\cl.exe -I$(INCPATH) /c

CL       = cl.exe -I$(INCPATH) -c

とします。これで正常動作するはず。
パスの通し方はここを参照

Page Top

試行錯誤した結果ようやく実行できたはろーわーるど

  • ちなみに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;
}
Page Top

こめんと(意見・質問・間違い指摘・その他何でも。)

  • introeみたいにライブラリを使おうとすると、エラーが出る。 -- uchan 2004-10-03 (日) 15:30:27
  • やっぱVC++は不便な点が多いので、GOがバージョンアップしてC++の不具合が無くなるのを期待。 -- uchan 2004-10-03 (日) 17:01:06
  • ライブラリ出来ました。VCにパスを通し、CL = cl.exe -I$(INCPATH) -c としました。 -- uchan 2004-10-04 (月) 07:16:28
  • ものぐさな人に必要な処置を施したosa_dir2改をあげておきます。http://bayside.upper.jp/upload/osasksdk-20041005.lzh -- bayside 2004-10-05 (火) 22:01:17
  • obj2bim3で"Warning : can't link ??2@YAPAXI@Z"が発生。どうもnewがリンクできていないらしい。 -- bayside 2004-10-06 (水) 15:17:52
  • つまりnew演算子用のランタイムがVCにあって、それが無いからリンクできないのでしょう。おそらくランタイムはOSに依存するので、VCのランタイムから持ってくるだけでは解決できないと思います。 -- K 2004-10-06 (水) 15:58:27
  • inline void* operator new(size_t n){ return malloc(n); } でたいていの環境でnewが使えるようになるはづ。 -- 名無しさん 2004-10-06 (水) 17:28:47

Last-modified: 2009-11-17 (火) 00:00:00 (JST) (319d) by ゲスト