title: unresolved windows externals
body: <p>I am using Visual Studio x64 Win64 Command Prompt(2010) to compile my code. I am getting some errors, that I would normally know how to fix in Visual Studio, but not with just a command line.</p>
  
  <p>Output:</p>
  
  <pre><code>Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
  Copyright (C) Microsoft Corporation.  All rights reserved.
  
  main.cpp
  Microsoft (R) Incremental Linker Version 10.00.40219.01
  Copyright (C) Microsoft Corporation.  All rights reserved.
  
  /out:main.exe
  main.obj
  main.obj : error LNK2019: unresolved external symbol __imp_DispatchMessageA referenced in function WinMain
  main.obj : error LNK2019: unresolved external symbol __imp_TranslateMessage referenced in function WinMain
  main.obj : error LNK2019: unresolved external symbol __imp_PeekMessageA referenced in function WinMain
  main.obj : error LNK2019: unresolved external symbol __imp_ShowWindow referenced in function WinMain
  main.obj : error LNK2019: unresolved external symbol __imp_CreateWindowExA referenced in function WinMain
  main.obj : error LNK2019: unresolved external symbol __imp_RegisterClassExA referenced in function WinMain
  main.obj : error LNK2019: unresolved external symbol __imp_LoadCursorA referenced in function WinMain
  main.obj : error LNK2019: unresolved external symbol __imp_DefWindowProcA referenced in function "__int64 __cdecl WindowProc(struct HWND__ *,unsigned int,unsigned __int64,__int64)" (?WindowProc@@YA_JPEAUHWND__@@I_K_J@Z)
  main.obj : error LNK2019: unresolved external symbol __imp_PostQuitMessage referenced in function "__int64 __cdecl WindowProc(struct HWND__ *,unsigned int,unsigned __int64,__int64)" (?WindowProc@@YA_JPEAUHWND__@@I_K_J@Z)
  main.exe : fatal error LNK1120: 9 unresolved externals
  </code></pre>
  
  <p>My code:</p>
  
  <pre><code>// include the basic windows header files and the Direct3D header file
  #include &lt;windows.h&gt;
  #include &lt;windowsx.h&gt;
  #include &lt;d3d9.h&gt;
  
  // include the Direct3D Library file
  #pragma comment (lib, "d3d9.lib")
  
  // 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(&amp;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(&amp;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(&amp;msg, NULL, 0, 0, PM_REMOVE))
          {
              TranslateMessage(&amp;msg);
              DispatchMessage(&amp;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(&amp;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-&gt;CreateDevice(D3DADAPTER_DEFAULT,
                        D3DDEVTYPE_HAL,
                        hWnd,
                        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                        &amp;d3dpp,
                        &amp;d3ddev);
  }
  
  
  // this is the function used to render a single frame
  void render_frame(void)
  {
      // clear the window to a deep blue
      d3ddev-&gt;Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0);
  
      d3ddev-&gt;BeginScene();    // begins the 3D scene
  
      // do 3D rendering on the back buffer here
  
      d3ddev-&gt;EndScene();    // ends the 3D scene
  
      d3ddev-&gt;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-&gt;Release();    // close and release the 3D device
      d3d-&gt;Release();    // close and release Direct3D
  }
  </code></pre>
  
  <p>I think I have a fairly good idea why this is happening, but I am not sure how to fix it.</p>