キャストの問題を処理していて、フッと思ったことなのですが、Win32APIが用意してくれる型って、ちょっと悪趣味だと思いません?だって、よく考えてみてくださいよ。

typedef int INT;
typedef long LONG;

とかしてるんですよ。APIの上では、型を大文字で統一しましょうみたいな流れがあったと風の噂で聞いたことはありますが、それが徹底されていない現状を見ると、どうしても気持ち悪いんです。

ABはWin32APIの影響をモロに受けるような言語仕様、ライブラリ構成になってるんですが、これらVCで不徹底されている型環境というお荷物まで背負い込むことはしたくないんですよね。

ABはVer4.1から厳しい型チェックを行える”#strict”ディレクティブを導入するので、LongとDWordを曖昧に使い分けたりはできないんです。気持ち悪い型の例をもう一つくらい示しておきましょうか。

typedef long LONG;
typedef unsigned int UINT;
typedef UINT WPARAM;
typedef LONG LPARAM;

LRESULT CALLBACK WindowProc(
HWND hwnd,// ウィンドウのハンドル
UINT uMsg,// メッセージ
WPARAM wParam,// メッセージの追加情報1
LPARAM lParam// メッセージの追加情報2
);

WPARAMとLPARAMって、正直新しい型を導入してまで定義する必要、あるんでしょうか。wParamもlParamも所詮はメッセージの追加情報。どうあがいても32ビット整数値なんです。しかも、符号あり/なしに分別されている意味がわかりません。2つともDWORD(もしくはUINT)に統一させればいいじゃないですか。

初心者向けにWin32APIを解説しているページを見かけると、WPARAMとLPARAMについてのコラム的な解説が目立ちます。結局はlongとかunsigned intとかなんですぅ〜、という具合にまとめられているのですが、だったら最初からlongとかunsigned intとかで定義してくれよぅ。WPARAMとLPARAMという新たな型を作り出す必要、符号あり/なしを分ける必要がどこにあるんだよーぅ。

と、まるでタダをこねるような本日の思想ですが、、、ABライブラリではどうしようか悩んでしまいます。Win32APIとの互換性を重要視するんであれば、またはネット上にある様々な情報を取り入れやすいようにするんであれば、WPARAMやLPARAMを始めとする奇妙な型を導入すべきなんだと思います。でもでも、おいら的に納得がいかないんですよね〜。

といいながら、Ver4.1でWPARAMとLPARAMを導入してしまいそうな、意思の弱さときたら…(トホホ)。まぁ、64ビット環境のライブラリなどの環境変化を考慮すると、型指定にワンクッション余裕を持たせるのは必要ではあるんですけどね…。ABユーザーの皆さん、AB環境に影響を及ぼしかねないWin32APIの型について、どう思います???