• ベストアンサー

DialogBoxのリソース読み込み

Win32プログラムを作成しています。 ダイアログボックスを表示させる必要が出てきたので、 DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_FORMVIEW) ,hWnd, DlgProc); と実行したのですが、この関数が失敗し、GetLastError()でエラーを調べたところ"指定されたリソースの種類は、イメージ ファイルに見つかりません。"という内容の1813が返ってきました。 どこが間違い部分なのか見当がつかず、どこの内容を示せばいいのかもわからないので、「何々の部分はどうなっているか」という質問も受けます。 何がまずいのかわかる方、ご教授お願いします。 環境はVC2005Standard, Xp

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス ・GetModuleHandle(NULL)  の代わりに  GetWindowLongPtr(hWnd,GWL_HINSTANCE)  を使ってみたらどうなりますか? HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr(hWnd,GWL_HINSTANCE); DialogBox( hInst, MAKEINTRESOURCE(IDD_FORMVIEW), hWnd, DlgProc ); 試して見て下さい。

qOat
質問者

お礼

うまく行きましたので、解決報告をします。 DllMainの引数hModuleをHINSTANCEにキャストした値と、GetModuleHandle(NULL)で取得した値が違うので、hModuleの方を使用したところ万事うまく行きました。 Oh-Orange様、Wr5様、新年早々ありがとうございました。

qOat
質問者

補足

返答ありがとうございます。 試してみましたが、うまく行きませんでした。 Instanceハンドルの値も、同じもののようです。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_FORMVIEW) ,hWnd, DlgProc); >と実行したのですが、この関数が失敗し、GetLastError()でエラーを調べたところ"指定されたリソースの種類は、イメージ ファイルに見つかりません。"という内容の1813が返ってきました。 リソースエディタで、「IDD_FORMVIEW」というIDのついたダイアログボックスのリソースは追加済み…ですよね? "IDD_FORMVIEW"というIDになっていたりはしないでしょうか? その場合はMAKEINTRESOURCE()は不要になりますが。

qOat
質問者

補足

IDはIDD_FORMVIEWです。"IDD_FORMVIEW"ではないです。 リソースファイルも追加しています。 内容説明が足りなかったので、追加します。 ・DLLです。 ・プロパティのリンカ/出力ファイルがデフォルトでなく、まったく関係ないディレクトリに設定してあります。

関連するQ&A