2012-06-23 35 views
0

我在win7 pc中使用VC 2010,並且在創建窗口時創建窗口設置lpszMenuName = 0時出現錯誤126窗口創建但得到GetLastError函數的代碼可以被任何我剛剛創建使用嚮導和相同的代碼,它生成創建一個簡單的窗口與菜單,如果我在這個功能時設定lpszMenuName 0在創建窗口後GetLastError返回代碼126但窗口創建在Win7中vc express



    #include "stdafx.h" 
    #include "simple.h" 
    #define MAX_LOADSTRING 100 
    // Global Variables: 
    HINSTANCE hInst;     // current instance 
    TCHAR szTitle[MAX_LOADSTRING];    // The title bar text 
    TCHAR szWindowClass[MAX_LOADSTRING];   // the main window class name 

    // Forward declarations of functions included in this code module: 
    ATOM    MyRegisterClass(HINSTANCE hInstance); 
    BOOL    InitInstance(HINSTANCE, int); 
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
    INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); 

    int APIENTRY _tWinMain(HINSTANCE hInstance, 
         HINSTANCE hPrevInstance, 
         LPTSTR lpCmdLine, 
         int  nCmdShow) 
    { 


     UNREFERENCED_PARAMETER(hPrevInstance); 
     UNREFERENCED_PARAMETER(lpCmdLine); 



     // TODO: Place code here. 

      MSG msg; 
      HACCEL hAccelTable; 

      // Initialize global strings 
      LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); 
      LoadString(hInstance, IDC_SIMPLE, szWindowClass, MAX_LOADSTRING); 
      MyRegisterClass(hInstance); 

      // Perform application initialization: 
      if (!InitInstance (hInstance, nCmdShow)) 
      { 
       return FALSE; 
      } 

      hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_SIMPLE)); 

      // Main message loop: 
      while (GetMessage(&msg, NULL, 0, 0)) 
      { 
       if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
       { 
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
       } 
      } 

      return (int) msg.wParam; 

    } 

項目註冊我設置的窗口wcex.lpszMenuName = 0



    ATOM MyRegisterClass(HINSTANCE hInstance) 
    { 
     WNDCLASSEX wcex; 

     wcex.cbSize = sizeof(WNDCLASSEX); 

     wcex.style   = CS_HREDRAW | CS_VREDRAW; 
     wcex.lpfnWndProc = WndProc; 
     wcex.cbClsExtra  = 0; 
     wcex.cbWndExtra  = 0; 
     wcex.hInstance  = hInstance; 
     wcex.hIcon   = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SIMPLE)); 
     wcex.hCursor  = LoadCursor(NULL, IDC_ARROW); 
     wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
     wcex.lpszMenuName = 0; 
     wcex.lpszClassName = szWindowClass; 
     wcex.hIconSm  = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); 

     return RegisterClassEx(&wcex); 
    } 

在這裏這個功能,我寫GetLastError函數()來測試錯誤



    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 
    { 
     HWND hWnd; 

     hInst = hInstance; // Store instance handle in our global variable 

     hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 
     DWORD eNum = GetLastError(); 
     if(eNum){ 
      ::MessageBox(hWnd, L"Error after creating windows", L"who cares", MB_OK | MB_ICONINFORMATION); 
     } 
     if (!hWnd) 
     { 
      return FALSE; 
     } 

     ShowWindow(hWnd, nCmdShow); 
     UpdateWindow(hWnd); 

     return TRUE; 
    } 


    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
     int wmId, wmEvent; 
     PAINTSTRUCT ps; 
     HDC hdc; 

     switch (message) 
     { 
     case WM_COMMAND: 
      wmId = LOWORD(wParam); 
      wmEvent = HIWORD(wParam); 
      // Parse the menu selections: 
      switch (wmId) 
      { 
      case IDM_ABOUT: 
       DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); 
       break; 
      case IDM_EXIT: 
       DestroyWindow(hWnd); 
       break; 
      default: 
       return DefWindowProc(hWnd, message, wParam, lParam); 
      } 
      break; 
     case WM_PAINT: 
      hdc = BeginPaint(hWnd, &ps); 
      // TODO: Add any drawing code here... 
      EndPaint(hWnd, &ps); 
      break; 
     case WM_DESTROY: 
      PostQuitMessage(0); 
      break; 
     default: 
      return DefWindowProc(hWnd, message, wParam, lParam); 
     } 
     return 0; 
    } 


    // Message handler for about box. 
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
     UNREFERENCED_PARAMETER(lParam); 
     switch (message) 
     { 
     case WM_INITDIALOG: 
      return (INT_PTR)TRUE; 

     case WM_COMMAND: 
      if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
      { 
       EndDialog(hDlg, LOWORD(wParam)); 
       return (INT_PTR)TRUE; 
      } 
      break; 
     } 
     return (INT_PTR)FALSE; 
    } 

,你可以看到的是幾乎相同的代碼嚮導生成的我只設置wcex.lpszMenuName = 0,添加一個帶有消息框的GetLastError。

+0

需要查看您的代碼。錯誤126是ERROR_MOD_NOT_FOUND \指定的模塊找不到。它可能是你的hInst圖標,光標或什麼是錯的? – Gunner

回答

0

我剛剛意識到,如果以管理員身份運行vc修復