Skip to main content
GameDev.net gamedev.net
🔒 Locked

Directx error need help

Started by sas1992 Oct 8, 2008 at 11:02 AM 7 replies 1k views
Original Post
sas1992
sas1992
Following is the source code:

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include <d3d9.h>

// define the screen resolution and keyboard macros
#define SCREEN_WIDTH  640
#define SCREEN_HEIGHT 480
#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

// 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 = (WNDPROC)WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    // wc.hbrBackground = (HBRUSH)COLOR_WINDOW;    // not needed any more
    wc.lpszClassName = L"WindowClass";

    RegisterClassEx(&wc);

    hWnd = CreateWindowEx(NULL,
                          "WindowClass",
                          "Our Direct3D Program",
                          WS_EX_TOPMOST | WS_POPUP,    // fullscreen values
                          0, 0,    // the starting x and y positions should be 0
                          SCREEN_WIDTH, SCREEN_HEIGHT,    // set the window to 640 x 480
                          NULL,
                          NULL,
                          hInstance,
                          NULL);

    ShowWindow(hWnd, nCmdShow);

    // set up and initialize Direct3D
    initD3D(hWnd);

    // enter the main loop:

    MSG msg;

    while(TRUE)
    {
        DWORD starting_point = GetTickCount();

        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            if (msg.message == WM_QUIT)
                break;

            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        render_frame();

        // check the 'escape' key
        if(KEY_DOWN(VK_ESCAPE))
            PostMessage(hWnd, WM_DESTROY, 0, 0);

        while ((GetTickCount() - starting_point) < 25);
    }

    // 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 = FALSE;    // program fullscreen, not windowed
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;    // discard old frames
    d3dpp.hDeviceWindow = hWnd;    // set the window to be used by Direct3D
    d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;    // set the back buffer format to 32-bit
    d3dpp.BackBufferWidth = SCREEN_WIDTH;    // set the width of the buffer
    d3dpp.BackBufferHeight = SCREEN_HEIGHT;    // set the height of the buffer


    // 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);

    return;
}


// 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

    return;
}


// 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

    return;
}

I'm gettin the following error: Compiling... DX.cpp C:\DX\DX.cpp(7) : fatal error C1083: Cannot open include file: 'd3d9.h': No such file or directory Error executing cl.exe. DX.exe - 1 error(s), 0 warning(s) Pls tell me abt this error and how to correct this error. Any help will be appreciated [Edited by - sas1992 on October 9, 2008 3:47:32 AM]
jpetrie
jpetrie
You have not installed the DirectX SDK, or you have not set you include paths in the IDE (Tools -> Options -> Projects and Solutions -> VC++ Directories) to include the path to the SDKs header and lib files.
sas1992
sas1992
Still getting this error
Compiling...
DX.cpp
Linking...
..\Program Files\Microsoft DirectX SDK (November 2007)\Lib\x64\d3d9.lib : fatal error LNK1113: invalid machine type
Error executing link.exe.

DX.exe - 1 error(s), 0 warning(s)
Aardvajk
Aardvajk
You appear to be linking against the 64-bit libraries. Are you sure you are using the 64-bit VS compiler? The one with VS Express is 32-bit only as far as I know.

If this is the problem, change your DXSDK directories in VS to point to the x32 directory.
Googol PL3X
Googol PL3X
Change where your include is to the x86 folder rather than x64 and it should work fine.
DividedByZero
DividedByZero
Quote:
Original post by Googol PL3X
Change where your include is to the x86 folder rather than x64 and it should work fine.


That should be the linker folder that should be changed. :)
Googol PL3X
Googol PL3X
Oh yeah sorry, Includes are the same for x86 and 64, libs are the ones to change in Linker->Input thanks lonewolff
Evil Steve
Evil Steve
Quote:
Original post by Googol PL3X
Oh yeah sorry, Includes are the same for x86 and 64, libs are the ones to change in Linker->Input thanks lonewolff
To be precise, the VC++ Directories should be changed for x86 / x64 in the IDE settings rather than setting it per-project.
sas1992
sas1992
how to change linking???

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.