2012-07-30 127 views
0

我很茫然,为什么我收到此错误:LNK2019解析的外部符号USER32.LIB

test_project.obj:错误LNK2019:无法解析的外部符号“INT __cdecl运行(无效)”(运行@ @YAHXZ)在功能_WinMain引用@ 16

代码如下:

  #include "stdafx.h" 
      #include "test_project.h" 
      #include <Windows.h> 

      HWND ghMainWnd = 0; 

      bool InitWindowsApp (HINSTANCE instanceHandle, int show); 

      int run(); 

      LRESULT CALLBACK 
      WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); 

      int WINAPI 
      WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nShowCmd) { 
       if (!InitWindowsApp (hInstance, nShowCmd)) 
        return 0; 
       return run(); 
      } 

      bool InitWindowsApp (HINSTANCE instanceHandle, int show) { 
       WNDCLASS wc; 
       wc.style  = CS_HREDRAW | CS_VREDRAW; 
       wc.lpfnWndProc = WndProc; 
       wc.cbClsExtra = 0; 
       wc.cbWndExtra = 0; 
       wc.hInstance = instanceHandle; 
       wc.hIcon  = LoadIcon(0, IDI_APPLICATION); 
       wc.hCursor  = LoadCursor(0 , IDC_ARROW); 
       wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
       wc.lpszMenuName = 0; 
       wc.lpszClassName = L"BasicWndClass"; 

       if (!RegisterClass(&wc)) { 
        MessageBox(0, L"RegisterClass FAILED", 0, 0); 
        return false; 
       } 

       ghMainWnd = CreateWindow (
        L"BasicWndClass", 
        L"Win32Basic", 
        WS_OVERLAPPEDWINDOW, 
        CW_USEDEFAULT, 
        CW_USEDEFAULT, 
        CW_USEDEFAULT, 
        CW_USEDEFAULT, 
        0, 
        0, 
        instanceHandle, 
        0); 

       if (ghMainWnd == 0) { 
        MessageBox (0, L"CreateWindow FAILED", 0, 0); 
        return false; 
       } 
       ShowWindow (ghMainWnd, show); 
       UpdateWindow (ghMainWnd); 

       return true; 
      } 

      int Run() { 
       MSG msg = {0}; 

       BOOL bRet = 1; 
       while ((bRet = GetMessage(&msg, 0, 0, 0)) != 0) { 
        if (bRet == -1) 
        { 
         MessageBox(0, L"GetMessage FAILED", L"Error", MB_OK); 
         break; 
        } 
        else { 
         TranslateMessage(&msg); 
         DispatchMessage(&msg); 
        } 
       } 
       return (int)msg.wParam; 
      } 

      LRESULT CALLBACK 
      WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { 
       switch(msg) { 
       case WM_LBUTTONDOWN: 
        MessageBox(0, L"Hello, World", L"Hello", MB_OK); 
        return 0; 
       case WM_KEYDOWN: 
        if (wParam == VK_ESCAPE) 
         DestroyWindow(ghMainWnd); 
        return 0; 
       case WM_DESTROY: 
        PostQuitMessage(0); 
        return 0; 
       } 

       return DefWindowProc (hWnd, msg, wParam, lParam); 
      } 

在属性pages-> C/C++ - >通用>额外包括我已经把含有的lib的目录的目录:C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Lib

在财产pages->接头 - >输入 - >附加依赖我已经把完整路径的lib C:\ Program Files文件\微软的SDK \的Windows \ V7.1 \ LIB \ USER32.LIB

在属性页面 - >连接器 - >系统 - >子系统我已经把Windows(/ SUBSYSTEM:WINDOWS)

我很遗憾接下来要尝试什么。

+0

搜索'的run()'并将其更改为'的run()'。 – 2012-07-30 15:36:57

回答

1

C++是case-sensitive。您必须决定是否为您的功能命名run()Run()

int run(); 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
        PSTR pCmdLine, int nShowCmd) { 
    if (!InitWindowsApp (hInstance, nShowCmd)) 
     return 0; 
    return run(); // <-- There. 
} 

对战:

int Run() { 
    // ... 
} 
相关问题