[WMP][C/C++]DLLは自分自身のリソースを使う事が出来ないのでしょうか?の続き。
いざエントリを投稿しようとして、ざっくりと見返していたら、なんでGetModuleHandle()の引数はNULLなん?と疑問を感じて、MSDNを紐解いてみました。
GetModuleHandle
呼び出し側プロセスのアドレス空間に該当ファイルがマップされている場合、指定されたモジュール名のモジュールハンドルを返します。
HMODULE GetModuleHandle(
LPCTSTR lpModuleName // モジュール名
);
lpModuleName
NULL を指定すると、呼び出し側プロセスの作成に使われたファイルのハンドルが返ります。
゜ ゜ ( д )ポカーン
呼び出し側プロセスって、Windows Media Playerじゃまいか。
GetModuleHandle()の引数に、自前のDLL名を指定すれば良さそうです。拡張子を略した場合「.dll」が付与されるらしいので、"sample"とだけ指定しておきます。
// HINSTANCE hInstance = ::GetModuleHandle(NULL);
HINSTANCE hInstance = ::GetModuleHandle("sample");
HBITMAP hBmp= LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
if(!hBmp)
{
//hBmpがNULLであればエラーメッセージを出力する
OutputMessage(GetLastError());
}
これでようやくhBmpの値を取得する事が出来ました。かれこれ1週間位これで悩んでいましたよ(´;ω;`)