電子書籍の厳選無料作品が豊富!

VC++コンソールアプリでのインスタンスハンドルの取得

VC++コンソールアプリケーションでインスタンスハンドルを取得しようとしているのですが、
HINSTANCE hi = (HINSTANCE)GetWindowLong(HWND_DESKTOP, GWL_HINSTANCE);
を実行すると、NULLが戻ってきます。

どこかまずい部分があるのでしょうか。
なお、第一引数のウィンドウハンドルは不明なため、
いくつかのWebサイトに習い、HWND_DESKTOPを指定しました。

A 回答 (1件)

>実行すると、NULLが戻ってきます。



GetLastError()は確認しましたか?

>なお、第一引数のウィンドウハンドルは不明なため、
>いくつかのWebサイトに習い、HWND_DESKTOPを指定しました。

適当なモノ指定するのはどうかと……。
アクセス権の問題もあるかと思いますけど、成功した場合は、Shellのインスタンスハンドルが返されるだけのような気がしますが。

GetModuleHandle(0); で、取れるようです。
# 取れる値って、リンカで指定したベースアドレス…のようです。
# 各プロセスでほとんど同じ値が取れることになりますけど。
# プロセス空間が異なる為、問題はない…(他の実行ファイルをLoadLibrary()した場合に変わることになりますね)
    • good
    • 0
この回答へのお礼

GetLastErrorは1400(ウィンドルハンドルが不正)が返されていました。

GetModuleHandle(0)を実行するとH'00400000が戻りました。
試しにコンソールアプリケーションのかわりにWINDOWSフォームアプリケーションを作成してみると、
関数WinMainの引数hInstanceにもH'00400000が格納されていました。

これで次のステップに進めそうです。
ありがとうございました。

お礼日時:2010/10/18 13:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!