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 なので、入らないのだ