2012-01-26 9 views
1

私はこの単純なウィンドウダイアログを起動させようとしていますが、起動するとすぐにhDialogint WINAPI WinMain()関数で作成されなかったことを意味する "Error x715"それはうまくコンパイルされます。WinApi CreateDialogがエラー715を返します

私は、Visual Studio 2010で作業することだし、それは "ビジュアルC++ - >Empty Project" のプロジェクト。それはhDialog = CreateDialog (hInst, MAKEINTRESOURCE (DLG_MAIN), 0, (DLGPROC)DialogProc);で失敗した理由を

#include "windows.h" 

#define DLG_MAIN 200 // ID for dialog 
#define DLG_ICON 30000 // IDs for icons 
#define DLG_ICON_S 30000 
#define IDC_QUIT 1011 // ID for "quit"-button 
#define IDC_INFO 2000 // ID for "info"-button 
#define ID_TIMER 1 // ID for timer 
#define IDC_STATIC -1 // ID for all labels 
#define TIMER_INTERRUPT 500 // timer msg interval in msec 

HINSTANCE TheInstance = 0; // instance handle of this program 

// Our main function 
void lalala(HWND hwnd) 
{ 
    /*Doesn't do anything yet.*/ 
} 

// Windows passes messages to application windows to indicate "something" 
// needs to be done 
BOOL CALLBACK DialogProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
     case WM_INITDIALOG: 
     // set the time to generate a timer message (WM_TIMER) 
     SetTimer(hwnd, ID_TIMER, TIMER_INTERRUPT, NULL); 
     return TRUE; 

     case WM_TIMER: 
     // a timer msg was received so call our main function! 
     lalala(hwnd); 
     return TRUE; 

     case WM_COMMAND: 
     switch (LOWORD(wParam)) 
     { 
      case IDC_INFO: 
      // the info button on the window was pressed 
      MessageBox(hwnd, "<show some info>", "The Jonas Brothers are way better than Nick Cave ever was.", MB_OK); 
      return TRUE; 

      case IDC_QUIT: 
      // the quit button on the window was pressed 
      PostQuitMessage(0); 
      return TRUE; 
     } 
     return TRUE; 

     case WM_DESTROY: 
     // this app is about to be closed so kill the timer 
     KillTimer(hwnd, ID_TIMER); 
     PostQuitMessage(0); 
     return TRUE; 

     case WM_CLOSE: 
     // destroy the window 
     DestroyWindow (hwnd); 
     return TRUE; 
    } 
return FALSE; 
} 

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char * cmdParam, int cmdShow) 
{ 
    TheInstance = hInst; 
    HWND hDialog = 0; 

    hDialog = CreateDialog (hInst, MAKEINTRESOURCE (DLG_MAIN), 0, (DLGPROC)DialogProc); 
    if (!hDialog) 
    { 
     char buf [100]; 
     wsprintf (buf, "Error x%x", GetLastError()); 
     MessageBox (0, buf, "CreateDialog", MB_ICONEXCLAMATION | MB_OK); 
     return 1; 
    } 

    HICON hIcon = LoadIcon (TheInstance, MAKEINTRESOURCE (DLG_ICON)); 
    SendMessage (hDialog, WM_SETICON, WPARAM (TRUE), LPARAM (hIcon)); 
    hIcon = LoadIcon (TheInstance, MAKEINTRESOURCE (DLG_ICON_S)); 
    SendMessage (hDialog, WM_SETICON, WPARAM (FALSE), LPARAM (hIcon)); 

    MSG msg; 
    int status; 
    while ((status = GetMessage (&msg, 0, 0, 0)) != 0) 
    { 
     if (status == -1) return -1; 

     if (!IsDialogMessage (hDialog, &msg)) 
     { 
      TranslateMessage (&msg); 
      DispatchMessage (&msg); 
     } 
    } 

    return msg.wParam; 
} 

は、誰も私に伝えることができます:

これは、プロジェクト内のファイルのみでフルmain.cppファイル、ありますか?

+1

あなたは*本当に*(DLGPROC)キャストを取り除く必要があり、それはあなたのコードのバグを隠して使用します。エラーは、リソーススクリプトを正しく記述していないことを示しています。 –

答えて

1

エラー0x715は、リソースセクションでは、あなたが指定された名前を持つダイアログを見つけるのに失敗した時にあなたが得るERROR_RESOURCE_NAME_NOT_FOUND、です。代わりに、各リソースのためのマクロを宣言する、ちょうど#include "resource.h"

+1

あなたが1でオフにしている、それが*見つからないリソース*型です。私は 'の#include「RESOURCE.H」'しようとすると –

+0

は 'オープンソースのファイルresource.h'することはできません。 resource.hがどんなものであるかは私には分かりません。それはどこに住んでいますか? – natli

+0

@nat; Visual Studioでリソースエディタを使用していますか?もしそうなら、これはすべて比較的シームレスに起こるはずです。はい、それが自動的に作成され、すべてのアプリのリソースのシンボルを含む 'resource.h'という名前のファイルを保持します。 –

関連する問題