Win32/64技術 002 WinUser.hファイルを読み込んでもGWL HINSTANCEが使えない

提供:yonewiki
2024年1月25日 (木) 00:06時点におけるYo-net (トーク | 投稿記録)による版 (→‎概要)

Win32/64_アプリケーション開発に戻る。

前の記事:Win32/64技術 001 マルチバイト文字列→ワイド文字列変換

次の記事:Win32/64技術 003 ワイド文字列→マルチバイト文字列変換

概要

 この記事はC++言語での技術説明です。Windowプロシージャ関数のHWND型のウィンドウハンドルがわかっている部分からアプリケーション起動時に引数として受け取ったようなインスタンスハンドルを取得するために、GetWindowLong関数を使います。便利な関数ですが、Win32とWin64で引数に使うキーワードが変わります。WinUser.hファイルをインクルードしていれば、Win32ではGWL_HINSTANCEというキーワードをよく使っていました。これがWin64アプリの設定では、GWLP_HINSTANCEというキーワードを使うことになっています。どちらも、整数値で表現すれば、-6という値ですが、作法が違うだけです。


 ちょっと古い参考書とかでWindowsアプリを学んでいる場合は、参考書はWin32で、読者がWin64での開発になっていることがありますので、同じような関数が、同じようなキーワードで使えないのは、大きなブレーキの原因になりそうですが、仕方のないことなのかもしれません。この記事に出会えた人は未然に防ぐことができてよかったね。


Win64の場合の例

HINSTANCE HINSTANCEinst = (HINSTANCE)GetWindowLong(HWNDwnd, GWLP_HINSTANCE);


Win32の場合の例

HINSTANCE HINSTANCEinst = (HINSTANCE)GetWindowLong(HWNDwnd, GWL_HINSTANCE);

 

前の記事:Win32/64技術 001 マルチバイト文字列→ワイド文字列変換

次の記事:Win32/64技術 003 ワイド文字列→マルチバイト文字列変換

Win32/64_アプリケーション開発に戻る。