-1

誰でもこのエラーで私を助けることができますか? そして、d3d10.lib と d3dx10.lib にリンクしました。

私はdirectXのことは初めてで、ウェンディ・ジョーンズのDirectX 10 toturialに従っていました

1>t1.obj : エラー LNK2019: 未解決の外部シンボル _D3D10CreateDeviceAndSwapChain@32 が関数 "bool cdecl InitDirect3D(struct HWND *,int,int)" で参照されました (?InitDirect3D@@YA_NPAUHWND__@@HH@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);
    }
}
4

3 に答える 3

0

ハードドライブのインクルードフォルダーはどうですか?

インクルードを介してそれに移動し、ライブラリの依存関係に lib/86 に追加する必要があります。

このリンクの手順に従ってください: http://www.rastertek.com/dx10tut01.html

これにより、DirectX のセットアップ プロセスが開始されます。最悪の事態が発生し、それを実行しても同じ問題が発生します。リンカーの問題ではないことがわかります。4人が今あなたに言ったのはどれですか。

また、このサイトは、DirectX についても説明しています。強くお勧めします。

于 2011-10-06T21:03:14.747 に答える
0

リンケージの問題です。ビジュアルスタジオに適切なライブラリを追加しましたか?

于 2011-07-05T13:29:12.703 に答える
0

リンカーの依存関係のリストに D3D10.lib を追加します。

于 2011-07-05T13:30:07.750 に答える