Win32/64技術 002 WinUser.hファイルを読み込んでもGWL HINSTANCEが使えない
概要
Windowプロシージャ関数のHWND型のウィンドウハンドルがわかっている部分からアプリケーション起動時に引数として受け取ったようなインスタンスハンドルを取得するために、GetWindowLong関数を使います。便利な関数ですが、Win32とWin64で引数に使うキーワードが変わります。WinUser.hファイルをインクルードしていれば、Win32ではGWL_HINSTANCEというキーワードをよく使っていました。これがWin64アプリの設定では、GWLP_HINSTANCEというキーワードを使うことになっています。どちらも、整数値で表現すれば、-6という値ですが、作法が違うだけです。
ちょっと古い参考書とかでWindowsアプリを学んでいる場合は、参考書はWin32で、読者がWin64での開発になっていることがありますので、同じような関数が、同じようなキーワードで使えないのは、大きなブレーキの原因になりそうですが、仕方のないことなのかもしれません。この記事に出会えた人は未然に防ぐことができてよかったね。
HINSTANCE HINSTANCEinst = (HINSTANCE)GetWindowLong(HWNDwnd, GWLP_HINSTANCE);