简体   繁体   中英

unresolved external symbol _D3D10CreateDeviceAndSwapChain@32 referenced in function "public: bool

Having trouble creating my swap chain. I receive the following error.

DX3dApp.obj : error LNK2019: unresolved external symbol _D3D10CreateDeviceAndSwapChain@32 referenced in function "public: bool __thiscall DX3dApp::InitDirect3D(void)" (?InitDirect3D@DX3dApp@@QAE_NXZ)

Below is the code ive done so far.

#include "DX3dApp.h"




bool DX3dApp::Init(HINSTANCE hInstance, int width, int height)
{
    mhInst = hInstance;
    mWidth = width;
    mHeight = height;

    if(!WindowsInit())
    {
        return false;
    }
    if(!InitDirect3D())
    {
        return false;
    }
}

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

     while (WM_QUIT != msg.message)
    {
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        Render();
    }

    return (int) msg.wParam;
}

bool DX3dApp::WindowsInit()
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = mhInst;
    wcex.hIcon          = 0;
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = TEXT("DirectXExample");
    wcex.hIconSm        = 0;
    RegisterClassEx(&wcex);

    // Resize the window
    RECT rect = { 0, 0, mWidth, mHeight };
    AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);

    // create the window from the class above
    mMainhWnd = CreateWindow(TEXT("DirectXExample"), 
                             TEXT("DirectXExample"), 
                             WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT, 
                             CW_USEDEFAULT, 
                             rect.right - rect.left, 
                             rect.bottom - rect.top, 
                             NULL, 
                             NULL, 
                             mhInst, 
                             NULL);
   if (!mMainhWnd)
   {
      return false;
   }

   ShowWindow(mMainhWnd, SW_SHOW);
   UpdateWindow(mMainhWnd);

   return true;
}

bool DX3dApp::InitDirect3D()
{
    DXGI_SWAP_CHAIN_DESC scd;
    ZeroMemory(&scd, sizeof(scd));

    scd.BufferCount = 1;
    scd.BufferDesc.Width = mWidth;
    scd.BufferDesc.Height = mHeight;
    scd.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
    scd.BufferDesc.RefreshRate.Numerator = 60;
    scd.BufferDesc.RefreshRate.Denominator = 1;
    scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    scd.OutputWindow = mMainhWnd;
    scd.SampleDesc.Count = 1;
    scd.SampleDesc.Quality = 0;
    scd.Windowed = TRUE;

    HRESULT hr = D3D10CreateDeviceAndSwapChain(NULL,D3D10_DRIVER_TYPE_REFERENCE,
                                                NULL,
                                                0,
                                                D3D10_SDK_VERSION,
                                                &scd,
                                                &mpSwapChain,
                                                &mpD3DDevice);

    if(!hr != S_OK)
    {
        return FALSE;
    }

    ID3D10Texture2D *pBackBuffer;

    return TRUE;
}

void DX3dApp::Render()
{

}


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) 
    {
        // Allow the user to press the escape key to end the application
        case WM_KEYDOWN:
            switch(wParam)
            {
                // Check if the user hit the escape key
                case VK_ESCAPE:
                    PostQuitMessage(0);
                break;
            }
        break;

        // The user hit the close button, close the application
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}

You are not linking against the D3D library ( D3D10.lib ).

Add that library to your linker options (Project properties -> Linker -> Input -> Additional Dependencies). You will need to make sure the library location is in the "Additional Library Directories" path as well.

您是否链接到D3D10.lib

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM