DialogBox() でリソース名が見つからない

解決


DD.  2006-01-23 11:25:53  No: 60484  IP: 192.*.*.*

DD.です。

お世話になります<(_ _)>
度々申し訳ないです。

WindowsXP SP2 : VS2005 Pro
Win32アプリ(SDK)にリソースでダイアログボックスを一つ追加しました。
ダイアログのみ使用になるので CreateWindow() 等は使用していません。

エラーの症状は
DialogBox()呼び出し時にエラーが発生します。
エラー内容は、「指定されたリソース名がイメージファイルに見つかりません。」になります。

以下コード抜粋:

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode )
{
  (void)hPrevInst; (void)lpszArgs; (void)nWinMode;

  InitApp();

  INT_PTR result;
  result = DialogBox( hInst, "IDD_DIALOG1", NULL, (DLGPROC)DlgProc );
  if ( result == 0 ) {
    char err_str[256];
    int err_size = 256;
    FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), NULL, err_str, err_size, NULL );
    MessageBox( NULL, err_str, "パラメータが無効です", MB_OK );
  } else if ( result == -1 ) {
    char err_str[256];
    int err_size = 256;
    FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), NULL, err_str, err_size, NULL );
    MessageBox( NULL, err_str, "何らかの原因です", MB_OK );
  }

  return 0;
}

Microsoftサイトより、DialogBox()の戻り値が "0" の場合には「パラメータが無効」もしくは「従来のWindowsのバージョンとの互換性」が問題であり、"-1" の場合にはそれ以外の問題がある。と、記載されていました。

本プログラムでは "-1" が帰ってきます。

作成しているダイアログは現在はデフォルトの状態で、「OK」「キャンセル」のボタンが存在するのみです。

リソースファイルより抜粋:
IDD_DIALOG1 DIALOGEX 0, 0, 337, 231
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
...
END

resource.h より抜粋:
#define IDD_DIALOG1                     101

resource.h はインクルードしてあります。

リソースファイルもプロジェクトには組み込んであるのですが、それを見に行っていないようにも思えます。
リソースファイルをプロジェクトからはずした状態でもエラー内容は同じでした。

こういった内容で何がエラーの原因として考えられるでしょうか?
ご存知の方いましたご教授お願い致します。

編集 削除
Ban  2006-01-23 11:30:47  No: 60485  IP: 192.*.*.*

> こういった内容で何がエラーの原因として考えられるでしょうか?

リソース識別子の師弟が間違ってます。
MAKEINTRESOURCE を調べてみてください。

編集 削除
Ban  2006-01-23 11:31:32  No: 60486  IP: 192.*.*.*

> リソース識別子の師弟が間違ってます。
リソース識別子の指定が間違ってます。

編集 削除
Blue  2006-01-23 11:46:32  No: 60487  IP: 192.*.*.*

> result = DialogBox( hInst, "IDD_DIALOG1", NULL, (DLGPROC)DlgProc );
名前(リテラル)で指定する場合は
> #define IDD_DIALOG1                     101
してあるとだめです。

#defineを削除するか、Banさんの指摘通りMAKEINTRESOURCEを使うかどちらかになります。

編集 削除
Blue  2006-01-23 11:59:28  No: 60488  IP: 192.*.*.*

> > #define IDD_DIALOG1                     101
> してあるとだめです。
間違えていました。

問題なのは
> IDD_DIALOG1 DIALOGEX 0, 0, 337, 231
こちらですね。
"IDD_DIALOG1" DIALOGEX 0, 0, 337, 231
かな。
「猫わか」42章
http://www.kumei.ne.jp/c_lang/sdk/sdk_42.htm

編集 削除
DD.  2006-01-23 11:59:57  No: 60489  IP: 192.*.*.*

うぁ、、、

Banさん、Blueさん、ありがとうございます。そしてすいません<(_ _)>
初歩的もいいところでしたねorz

猫でもわかる〜も参照してたんですがほんとに最初のほうの章ばっか見てました。

無事に解決致しました。

編集 削除
Blue  2006-01-23 12:02:25  No: 60490  IP: 192.*.*.*

> "IDD_DIALOG1" DIALOGEX 0, 0, 337, 231
あれ?よくわからなくなってきた。。。

誤爆しているっぽいので無視してください。。orz

編集 削除