title: Trying to add User32.lib to linker instead of using #pragma comment (lib, "User32.lib")
body: <p>Im using Visual Studio 2010 on Windows 7 32bit.</p>
  
  <p>I was doing the tutorial at <a href="http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-1" rel="nofollow">http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-1</a> in Visual Studio 2010 to learn DirectX.</p>
  
  <p>To VC++ Directories > Include Directories, I added: "C:\Program Files\Microsoft DirectX SDK (August 2009)\Include;"</p>
  
  <p>TO VC++ Directories > Libirary Directories C:\Program Files\Microsoft DirectX SDK (August 2009)\Lib\x86;</p>
  
  <p>Under Properties Manager > Properties > Properties >Linker > Input > Additional Dependencies, I added: User32.lib;d3d9.lib;d3dx9.lib;</p>
  
  <p>They are now:</p>
  
  <pre><code>    full include directories: C:\Program Files\Microsoft DirectX SDK (August 2009)\Include;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;
  
      full library directories: C:\Program Files\Microsoft DirectX SDK (August 2009)\Lib\x86;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib
  
  additional depdendencies: User32.lib;d3d9.lib;d3dx9.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
  </code></pre>
  
  <p>I did that because i wanted the relevent libaries accessable by the linker in the linker settings.</p>
  
  <p>My problem is this that unless I add:</p>
  
  <pre><code>    #pragma comment (lib, "User32.lib")
  </code></pre>
  
  <p>to the top of my c++ code like this:</p>
  
  <pre><code>    // include the basic windows header files and the Direct3D header file
      #include 
      #include 
      #include 
  
      // include the Direct3D Library file
      //#pragma comment (lib, "d3d9.lib")//i commented out this
      #pragma comment (lib, "User32.lib")//I ADDED THIS
  
  
      // global declarations
      LPDIRECT3D9 d3d;    // the pointer to our Direct3D interface
      LPDIRECT3DDEVICE9 d3ddev;    // the pointer to the device class
  
      // function prototypes
      void initD3D(HWND hWnd);    // sets up and initializes Direct3D
      void render_frame(void);    // renders a single frame
      void cleanD3D(void);    // closes Direct3D and releases memory
  
      // the WindowProc function prototype
      LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
  
  
      // the entry point for any Windows program
      int WINAPI WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine,
                         int nCmdShow)
      {
          HWND hWnd;
          WNDCLASSEX wc;
  
          ZeroMemory(&wc, sizeof(WNDCLASSEX));
  
          wc.cbSize = sizeof(WNDCLASSEX);
          wc.style = CS_HREDRAW | CS_VREDRAW;
          wc.lpfnWndProc = WindowProc;
          wc.hInstance = hInstance;
          wc.hCursor = LoadCursor(NULL, IDC_ARROW);
          wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
          wc.lpszClassName = "WindowClass";
  
          RegisterClassEx(&wc);
  
          hWnd = CreateWindowEx(NULL,
                                "WindowClass",
                                "Our First Direct3D Program",
                                WS_OVERLAPPEDWINDOW,
                                300, 300,
                                800, 600,
                                NULL,
                                NULL,
                                hInstance,
                                NULL);
  
          ShowWindow(hWnd, nCmdShow);
  
          // set up and initialize Direct3D
          initD3D(hWnd);
  
          // enter the main loop:
  
          MSG msg;
  
          while(TRUE)
          {
              while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
              {
                  TranslateMessage(&msg);
                  DispatchMessage(&msg);
              }
  
              if(msg.message == WM_QUIT)
                  break;
  
              render_frame();
          }
  
          // clean up DirectX and COM
          cleanD3D();
  
          return msg.wParam;
      }
  
  
      // this is the main message handler for the program
      LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
      {
          switch(message)
          {
              case WM_DESTROY:
                  {
                      PostQuitMessage(0);
                      return 0;
                  } break;
          }
  
          return DefWindowProc (hWnd, message, wParam, lParam);
      }
  
  
      // this function initializes and prepares Direct3D for use
      void initD3D(HWND hWnd)
      {
          d3d = Direct3DCreate9(D3D_SDK_VERSION);    // create the Direct3D interface
  
          D3DPRESENT_PARAMETERS d3dpp;    // create a struct to hold various device information
  
          ZeroMemory(&d3dpp, sizeof(d3dpp));    // clear out the struct for use
          d3dpp.Windowed = TRUE;    // program windowed, not fullscreen
          d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;    // discard old frames
          d3dpp.hDeviceWindow = hWnd;    // set the window to be used by Direct3D
  
  
          // create a device class using this information and the info from the d3dpp stuct
          d3d->CreateDevice(D3DADAPTER_DEFAULT,
                            D3DDEVTYPE_HAL,
                            hWnd,
                            D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                            &d3dpp,
                            &d3ddev);
      }
  
  
      // this is the function used to render a single frame
      void render_frame(void)
      {
          // clear the window to a deep blue
          d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0);
  
          d3ddev->BeginScene();    // begins the 3D scene
  
          // do 3D rendering on the back buffer here
  
          d3ddev->EndScene();    // ends the 3D scene
  
          d3ddev->Present(NULL, NULL, NULL, NULL);   // displays the created frame on the screen
      }
  
  
      // this is the function that cleans up Direct3D and COM
      void cleanD3D(void)
      {
          d3ddev->Release();    // close and release the 3D device
          d3d->Release();    // close and release Direct3D
      }</code></pre>
  
  <p>I get these linker errors:</p>
  
  <pre><code>    1>Source1.obj : error LNK2019: unresolved external symbol __imp__DispatchMessageA@4 referenced in function _WinMain@16
      1>Source1.obj : error LNK2019: unresolved external symbol __imp__TranslateMessage@4 referenced in function _WinMain@16
      1>Source1.obj : error LNK2019: unresolved external symbol __imp__PeekMessageA@20 referenced in function _WinMain@16
      1>Source1.obj : error LNK2019: unresolved external symbol __imp__ShowWindow@8 referenced in function _WinMain@16
      1>Source1.obj : error LNK2019: unresolved external symbol __imp__CreateWindowExA@48 referenced in function _WinMain@16
      1>Source1.obj : error LNK2019: unresolved external symbol __imp__RegisterClassExA@4 referenced in function _WinMain@16
      1>Source1.obj : error LNK2019: unresolved external symbol __imp__LoadCursorA@8 referenced in function _WinMain@16
      1>Source1.obj : error LNK2019: unresolved external symbol __imp__DefWindowProcA@16 referenced in function "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)
      1>Source1.obj : error LNK2019: unresolved external symbol __imp__PostQuitMessage@4 referenced in function "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)
      1>C:\Users\User\Documents\Visual Studio 2010\Projects\Direct3dDemo\Debug\Direct3dDemo.exe : fatal error LNK1120: 9 unresolved externals
  
  </code></pre>
  
  <p>Even though i have User32.lib in the linker</p>
  
  <p>How can I stop using "#pragma comment (lib, "User32.lib")" and rely on the linker?</p>