Visual C ++ DirectX ошибка компиляции - PullRequest
0 голосов
/ 05 июля 2011

Может кто-нибудь помочь мне с этой ошибкой? И я связался с d3d10.lib и d3dx10.lib.

Я новичок в DirectX, и я следил за Венди Джонсом DirectX 10 всего

1> t1.obj: ошибка LNK2019: неразрешенный внешний символ _D3D10CreateDeviceAndSwapChain @ 32, на который имеется ссылка в функции "bool cdecl InitDirect3D (struct HWND *, int, int)" (? InitDirect3D @@ YH_NU) @Z) 1> C: \ Users \ Ehsan \ Documents \ Visual Studio 2010 \ Projects \ DirectX \ t1 \ Debug \ t1.exe: фатальная ошибка LNK1120: 1 неразрешенный внешний код

исходный код:

// t1.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "windows.h"
#include "tchar.h"  
#include <d3d10.h>
#include <d3dx10.h>

// Global Variables:
HINSTANCE hInst; // global handle to hold the application instance
HWND wndHandle; // global variable to hold the window handle
int width = 640;
int height = 480;

// Direct3D global vars
ID3D10Device * pD3DDevice = NULL;
IDXGISwapChain * pSwapChain = NULL;
ID3D10RenderTargetView * pRenderTargetView = NULL;

// Forward declarations of functions included in this code module:
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
bool InitWindow( HINSTANCE hInstance, int width, int height );
void Render();
void ShutDownDirect3D();
bool InitDirect3D(HWND hWnd, int width, int height);



int APIENTRY _tWinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPTSTR    lpCmdLine,
    int       nCmdShow)
{


    // TODO: Place code here.
    MSG msg = {0};
    // Perform application initialization:
    if ( !InitWindow( hInstance, width, height ) )
    {
        return FALSE;
    }
    // called after creating the window
    if(!InitDirect3D(wndHandle, width, height))
    {
        return FALSE;
    }

    //hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_T1));

    // Main message loop:
    while (WM_QUIT != msg.message)
    {
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        // Call the render function
        Render();
    }
    ShutDownDirect3D();
    return (int) msg.wParam;

}


bool InitWindow(HINSTANCE hInstance, int width, int height)
{
    WNDCLASSEX wcex;
    // Fill in the WNDCLASSEX structure. This describes how the window
    // will look to the system
    wcex.cbSize = sizeof(WNDCLASSEX); // the size of the structure
    wcex.style = CS_HREDRAW | CS_VREDRAW; // the class style
    wcex.lpfnWndProc = (WNDPROC)WndProc; // the window procedure callback
    wcex.cbClsExtra = 0; // extra bytes to allocate for this class
    wcex.cbWndExtra = 0; // extra bytes to allocate for this instance
    wcex.hInstance = hInstance; // handle to the application instance
    wcex.hIcon = 0; // icon to associate with the application
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW); // the default cursor to use
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // the background color
    wcex.lpszMenuName = NULL; // the resource name for the menu
    wcex.lpszClassName = TEXT("DirectXExample"); // the class name being created
    wcex.hIconSm = 0; // the handle to the small icon
    RegisterClassEx(&wcex);

    // Resize the window
    RECT rect = { 0, 0, width, height };
    AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
    // create the window from the class above

    wndHandle = CreateWindow(TEXT("DirectXExample"),
        TEXT("DirectXExample"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        rect.right - rect.left,
        rect.bottom - rect.top,
        NULL,
        NULL,
        hInstance,
        NULL);
    if (!wndHandle)
    {
        return false;
    }
    // Display the window on the screen
    ShowWindow(wndHandle, SW_SHOW);
    UpdateWindow(wndHandle);
    return true;
}

//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND  - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    // Check any available messages from the queue
    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;
    }
    // Always return the message to the default window procedure for furtherprocessing
    return DefWindowProc(hWnd, message, wParam, lParam);
}

/*******************************************************************
* InitDirect3D
* Initializes Direct3D
* Inputs - Parent window handle - HWND,
Window width - int
Window height - int
Updating the Code 31
* Outputs - true if successful, false if failed - bool
*******************************************************************/
bool InitDirect3D(HWND hWnd, int width, int height)
{
    // Create the clear the DXGI_SWAP_CHAIN_DESC structure
    DXGI_SWAP_CHAIN_DESC swapChainDesc;
    ZeroMemory(&swapChainDesc, sizeof(swapChainDesc));

    // Fill in the needed values
    swapChainDesc.BufferCount = 1;
    swapChainDesc.BufferDesc.Width = width;
    swapChainDesc.BufferDesc.Height = height;
    swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
    swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
    swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    swapChainDesc.OutputWindow = hWnd;
    swapChainDesc.SampleDesc.Count = 1;
    swapChainDesc.SampleDesc.Quality = 0;
    swapChainDesc.Windowed = TRUE;

    // Create the D3D device and the swap chain
    HRESULT hr = D3D10CreateDeviceAndSwapChain(NULL,
        D3D10_DRIVER_TYPE_REFERENCE,
        NULL,
        0,
        D3D10_SDK_VERSION,
        &swapChainDesc,
        &pSwapChain,
        &pD3DDevice);

    // Error checking. Make sure the device was created
    if (hr != S_OK)
    {
        return false;
    }

    // Get the back buffer from the swapchain
    ID3D10Texture2D * pBackBuffer;
    hr = pSwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*) &pBackBuffer);
    if (hr != S_OK)
    {
        return false;
    }

    // create the render target view
    hr = pD3DDevice->CreateRenderTargetView(pBackBuffer, NULL, &pRenderTargetView);

    // release the back buffer
    pBackBuffer->Release();

    // Make sure the render target view was created successfully
    if (hr != S_OK)
    {
        return false;
    }

    // set the render target
    pD3DDevice->OMSetRenderTargets(1, &pRenderTargetView, NULL);

    // create and set the viewport
    D3D10_VIEWPORT viewport;
    viewport.Width = width;
    viewport.Height = height;
    viewport.MinDepth = 0.0f;
    viewport.MaxDepth = 1.0f;
    viewport.TopLeftX = 0;
    viewport.TopLeftY = 0;

    pD3DDevice->RSSetViewports(1, &viewport);

    return true;
}

/*******************************************************************
* ShutdownDirect3D
* Closes down and releases the resources for Direct3D
34 Chapter 2 n Your First DirectX Program
* Inputs - void
* Outputs - void
*******************************************************************/
void ShutDownDirect3D()
{
    // release the rendertarget
    if(pRenderTargetView)
    {
        pRenderTargetView->Release();
    }

    // release the swapchain
    if(pSwapChain)
    {
        pSwapChain->Release();
    }

    // release the D3D Device
    if(pD3DDevice)
    {
        pD3DDevice->Release();
    }
}

/*******************************************************************
* Render
* All drawing happens in the Render function
* Inputs - void
* Outputs - void
*******************************************************************/
void Render()
{
    if (pD3DDevice != NULL)
    {
        // clear the target buffer
        pD3DDevice->ClearRenderTargetView(pRenderTargetView, D3DXCOLOR(0.0f, 0.0f, 0.0f, 0.0f));

        // All drawing will go here.

        // display the next item in the swap chain
        pSwapChain->Present(0, 0);
    }
}

Ответы [ 3 ]

0 голосов
/ 05 июля 2011

Добавьте D3D10.lib в список зависимостей компоновщика.

0 голосов
/ 07 октября 2011

А как насчет вашей включаемой папки на жестком диске?

Вам необходимо перейти к этому через свои включения, а также добавить в lib / 86 к зависимостям библиотек.

Следуйте инструкциям в этомссылка: http://www.rastertek.com/dx10tut01.html

Это проведет вас через процесс настройки DirectX.Худшее случается, и вы делаете это, и вы все еще получаете ту же проблему, вы знаете, это не проблема компоновщика.Который 4 человека теперь сказал вам, что это.

Также этот сайт отлично подходит для ознакомления с DirectX.Я очень советую.

0 голосов
/ 05 июля 2011

Это проблема связывания, вы добавили нужную библиотеку в визуальную студию?

...