2012-06-01 91 views
3

我正在使用Visual Studio x64 Win64命令提示符(2010)來編譯我的代碼。我遇到了一些錯誤,我通常會知道如何在Visual Studio中修復,但不能僅使用命令行。未解決的Windows外部問題

輸出:

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)" ([email protected]@[email protected]@[email protected]) 
main.obj : error LNK2019: unresolved external symbol __imp_PostQuitMessage referenced in function "__int64 __cdecl WindowProc(struct HWND__ *,unsigned int,unsigned __int64,__int64)" ([email protected]@[email protected]@[email protected]) 
main.exe : fatal error LNK1120: 9 unresolved externals 

我的代碼:

// include the basic windows header files and the Direct3D header file 
#include <windows.h> 
#include <windowsx.h> 
#include <d3d9.h> 

// 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(&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 
} 

我想我有爲什麼會這樣一個相當不錯的主意,但我不知道如何解決它。

回答

11

你缺少USER32.LIB

嘗試的#includes

後添加以下代碼
#pragma comment(lib,"user32.lib") 
+0

謝謝,成功了! –

+0

是的,正在努力。需要10分鐘才能標記。 –

+0

完美完成... –

相關問題