Q. 窓プログラミングしてたら MAKEINTRESOURCE でエラったんだけど、どーして?

A. WORD から、ポインタにキャストってるからじゃね?

MAKEINTRESOURCE は、整数値から文字列へのポインタへキャストするマクロなんだけど、
gcc だと、ん〜、ここら辺はよく知らないっつーか、前に私が書いた日記に書いてあった。

error: cast from 'CHAR*' to 'WORD' loses precision

「WORD が char のポインタになるにはちっさすぎるってことらしい*1」ってことらしい。
とりあえず、MAKEINTRESOURCE の定義はこんな感じ:

#define     MAKEINTRESOURCEA(i)     ((LPSTR)((ULONG_PTR)((WORD)(i))))
#define     MAKEINTRESOURCEW(i)     ((LPWSTR)((ULONG_PTR)((WORD)(i))))
#ifdef UNICODE
#   define  MAKEINTRESOURCE     MAKEINTRESOURCEW
#else
#   define  MAKEINTRESOURCE     MAKEINTRESOURCEA
#endif // !UNICODE

で、MinGW32 の場合だけ、WORD をとっぱらえばいいわけだ。
ということで、こんな風にした:

#if defined(__MINGW32__)
#   undef  MAKEINTRESOURCE
#   define MAKEINTRESOURCE(i) ((LPSTR)((ULONG_PTR)(i)))
#endif  /* defined(__MINGW32__) */

おまけ

あと、リンクするときにつけとけばいいんじゃね?なオプションを書いとく。

-gdi32
gdi32 をどーにかするんじゃない?
-mwindows
コマプロを除去する。

*1:ポインタは 32 bit、WORD は 16 bit なので、入らないのだ