たまには仕事っぽい話しも。中身には触れられないけど。
仕事で久々に開発。っていうかWindows7&64Bit対応。
ソースコードの管理ができてないのはよくある話ですが、
今回はMSの仕様で嫌になった話。
Win32/64はAPI周りでINT_PTRという型を引数に取る。
これはintのポインタではなく、
現在の環境のポインタと同じ長さの整数。なので変数。アドレス型ではない。
WIN32が定義されていれば32bit、WIN64なら64bit。
これだけならまだいいんだけど、
PUINT_PTRとかが絡むと面倒。
PUINT_PTRはUINT_PTRのポインタ。
だけども&UINT_PTRでキャストしても通らない。
typedefされているため、別の型として扱われるのだ。えー。
実質UINT_PTRのポインタであることは間違いないので、
reinterpret_cast<PINT_PTR>すればいいんだろうけど、キモイ。
_PTRって書き方がそもそもキモい。
それを&で参照できるのに、コンパイラがWIN32/WIN64の都合で、
castを強制されるのが気持ち悪い。
型チェックしておこうかと思ったけど、それもまたキモいな。
まぁいいかこれで。
ちなみにLONG_PTRはINT_PTRと一緒。えー。
Objective-Cをやってると、VCのWIN32/64対応はガサツすぎて泣きたくなる。
0 件のコメント:
コメントを投稿