インスタンスハンドルとモジュールハンドルって同じ用に扱ってもいい? – プログラミング – Home

インスタンスハンドルとモジュールハンド...
 
通知
すべてクリア

[解決済] インスタンスハンドルとモジュールハンドルって同じ用に扱ってもいい?


もう太郎
 もう太郎
(@もう太郎)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

GetModuleHandle(NULL)とGetWindowLong(hwnd, GWL_HINSTANCE)で取得できるハンドルっ
て同一のものとして扱っても構わないの?
そもそもインスタンスハンドルとモジュールハンドルって何か違いでもあるんでしょう
か?


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

基本的には同じものですから、HINSTANCE を GetModuleFileName 等の HMODULE を取る関
数に与えても問題ありません。
ただし、GetModuleHandle( NULL ) と GetWindowLong( hwnd, GWL_HINSTANCE ) が常に同
じ値を返すかどうかはわかりません。

余談:
インスタンスハンドルもモジュールハンドルも、そのモジュール(DLLやEXE)がメモリ上
にマップ(ロード)されているアドレスです。
ですから、それらを GetMappedFileName に与えることでもファイル名を得られます(見
慣れない形式で返ってくるでしょうけど…)。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>GetModuleHandle(NULL)とGetWindowLong(hwnd, GWL_HINSTANCE)で取得できるハンドルっ
>て同一のものとして扱っても構わないの?
ウインドウハンドルが他のプロセスのものでないなら同じではないかと思います。

>そもそもインスタンスハンドルとモジュールハンドルって何か違いでもあるんでしょう
>か?
違いがないと書かれたドキュメントは見つけられませんでしたが
windef.hにはHINSTANCEの代わりにHMODULEが使えるというコメントがあります。

typedef HINSTANCE HMODULE; /* HMODULEs can be used in place of HINSTANCEs */


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>ウインドウハンドルが他のプロセスのものでないなら同じではないかと思います。
と書きましたが、プロセスが同じでも異なる場合もありますね。
CreateWindowのパラメータに他のDLLのインスタンスハンドルを
渡していた場合にはGetWindowLongの戻り値はDLLのインスタンスハンドルになります。


返信引用
もう太郎
 もう太郎
(@もう太郎)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

うーん。
分かったような分からないような・・
ちょっと難しいです。
おとなしくオーソドックスな方法を時と場所に応じて用いたほうがいいのかな?・・
(汗
返答してくれた方々、ありがとうございました。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> CreateWindowのパラメータに他のDLLのインスタンスハンドルを
> 渡していた場合にはGetWindowLongの戻り値はDLLのインスタンスハンドルになります。

検証していませんが、NT系のOSではCreateWindowのHINSTANCEは無視されるとあります。
違う値が返りました?


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>検証していませんが、NT系のOSではCreateWindowのHINSTANCEは無視されるとあります。
>違う値が返りました?
XP環境でLoadLibraryで適当なDLLをロードしてHINSTANCEに指定するとその値になりました。
NULLを指定するとGetWindowLongの戻り値もNULLになるようです。
確かにCreateWindowの説明にはHINSTANCEは無視されると書いてありますね・・・


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

検証ありがとうございます。
とりあえず渡された値は保持しておくが、使ってはいないということですかね。

# 検証できる環境を作らないとな…


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました