プログラム研究所

TOP PAGE
ここに記載された事項に関して間違いなどがあるかもしれません。 だからちょこちょこ直したりする場合があります。あらかじめご了承ください。

携帯アプリ

JAVAは、プログラム言語で携帯などでも使われています。
でも、だからといって同じプログラムがそのまま動くわけではなく、 記述に差がある部分があります。

一つのソースで、プリプロセッサを使いソースを分けるように作られています。
プリプロセッサは これ を使って説明
i-modeの場合は、
cpp32_std -P -Q -S1 -S199901L -C -D I505 _Peg.java >C:\iDKDoJa3.0\apps\Peg\src\Peg.java
auの場合は、
cpp32_std -P -Q -S1 -S199901L -C -D AU _Peg.java >C:\ezplusTools\Tools\CmdTool\project\Peg\src\Peg.java
のようにしてバッチファイルを実行すると、それぞれのソースが出来上がります。

defineを組み合わせる時は、
cpp32_std -P -Q -S1 -S199901L -C -D I505 -D SAVE _Peg.java >C:\iDKDoJa3.0\apps\Peg\src\Peg.java
のようにします。
define設定

#define CLNAME Peg // クラスの名前を設定
#define SND_NUM 4 // サウンドファイルの数を設定
#define GIF_NUM 1 //画像読み込み枚数

#ifdef APL // アプレット用にする

#ifdef I505 // i-mode505用にする
#ifdef I504 // i-mode504用にする
#ifdef I503 // i-mode503用にする

#ifdef AU // au用にする
#ifdef QVGA // auQVGA専用
#ifdef VODA // vodafone用にする
#ifdef J0x // vodafone0xの特殊な時

#ifdef SND // サウンド機能を使う
#ifdef SE // vodafone(5x用) サウンドのspfファイルを使う(mmfより安定)
#ifdef V0xSND // vodafone0x用(spfファイル)にする

#ifdef SAVE // 保存機能を使う



CE関係 Windows95 98とCEでのプログラミングの違いなど


どんな CE

CEにも、いろいろあります。画面サイズやら、カラー数やら、ということでプログラムからどんなCEか知るための関数です。
rectW = GetSystemMetrics( SM_CXSCREEN ) ;	// 画面の幅
rectH = GetSystemMetrics( SM_CYSCREEN ) ;	// 画面の高さ
ncolor = GetDeviceCaps( hDC,COLORRES ) ;	// 何色か、返り値はビット数

ということでこれらの数値によって、プログラムの動作などを変更するなどしなくてはならないわけですが、
次々と新種が出てきている現在は、出来るだけ対応できるように心がけるといったところでしょうか。

乱数の違い

CE と 95 98 では、乱数を発生させる関数の記述が違っています。

int random()				// 共通で使えるようにランダム関数を用意
{
#ifdef _WIN32_WCE
	return (abs(Random()));		// CEのとき intで返すため絶対値にする
#else
	return (rand());		// 95 98のとき
#endif
}

のようにして両対応の記述にすると便利でしょう。
また、95 98 の場合は、
	srand((unsigned)time(NULL));
のように、乱数の初期化が必要です。

CEは、UNICODE

CE の API は UNICODE のみサポートですから、
CEのプログラムでは、UNICODEに対応する記述を使わなくてはなりません。
これにともない95や98用に書かれたソースコードをCE用に移植する際、
ソースファイルのchar型をTCHAR型に変更する必要があります。
文字列操作関数も
strcpy() → _tcscpy()
strcat() → _tcscat()
strlen() → _tcslen()
のように変更する必要があります。
ソースコード中のcharをTCHARにするとかは、置き換えとかで、簡単に変更できますが、
文字列のほうは、そう簡単にはいきません。
"TEST"; → TEXT("TEST");
のように記述する必要があります。
まぁ、1、2個の変更ならいいのですが、沢山あると直すのは、結構大変です。
そこで、だーとやってくれるのを作ってみました。
このように記述すれば、UNICODE と MBCSの両方の文字コードに対応できるプログラムになります。
C言語ソースファイルも付けましたので適当に使ってください。
漢字が入ったコードの場合も多分、OKにしたつもり。
実行方法
コンソールアプリですので、
filename1 変換元のファイル名
filename2 変換先のファイル名
DOS窓、またはBATファイルで
FILE filename1 >filename2

のようにすれば、標準出力されます。
実行ファイルとソースはこちらです。

汎用関数

2つの四角形が重なるか判定する関数です。APIにあったと思って探したのですが、 なかなか見つからなかったので作ってしまいました。
// 2つの四角形が重なるか
// I int	l1,t1,r1,b1;	比較する四角形の座標1(left,top,right,bottom)
// I int	l2,t2,r2,b2;	比較する四角形の座標2(left,top,right,bottom)
// O BOOL	戻り値	TRUE:重なる FALSE:重ならない

BOOL RectInRect(int l1,int t1,int r1,int b1,int l2,int t2,int r2,int b2)
{										
	BOOL ret = TRUE;			// 重なっている
	if(l1 > r2)	ret = FALSE;		// 外れている場合
	if(r1 < l2)	ret = FALSE;
	if(t1 > b2)	ret = FALSE;
	if(b1 < t2)	ret = FALSE;
	return(ret);
}

TOP PAGE