0

I saw another post addressing this issue however the asker was apparently including winnt.h instead of windows.h (which supposedly includes winnt.h)

I'm using windows.h but still getting this issue.

I've tried using Visual Studio 2010 Express and Ultimate and both produce this error.

Has anyone encountered this before?

Here is the code:

#include<Windows.h>
#include<d3d9.h>
#include<time.h>
#include<d3dx.h>

#define APPTITLE "Create Surface"

#define KEY_DOWN(vk_code)((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEY_UP(vk_code)((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)

#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480

LRESULT WINAPI WinProc(HWND, UINT, WPARAM, LPARAM);
ATOM MyRegisterClass(HINSTANCE);
int Game_Init(HWND);
void Game_Run(HWND);
void Game_End(HWND);

LPDIRECT3D9 d3d = NULL;
LPDIRECT3DDEVICE9 d3ddev = NULL;

LPDIRECT3DSURFACE9 backbuffer = NULL, surface = NULL;

LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
    switch(msg){
    case WM_DESTROY:
        Game_End(hWnd);
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}

ATOM MyRegisterClass(HINSTANCE hInstance){
    WNDCLASSEX wc;
    wc.cbSize = sizeof(WNDCLASSEX);

    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = (WNDPROC)WinProc;
    wc.cbWndExtra = 0;
    wc.cbClsExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = NULL;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = APPTITLE;
    wc.hIconSm = NULL;

    return RegisterClassEx(&wc);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
    MSG msg;

    MyRegisterClass(hInstance);

    HWND hWnd;

    hWnd = CreateWindow(
        APPTITLE,
        APPTITLE,
        WS_EX_TOPMOST | WS_VISIBLE | WS_POPUP,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        SCREEN_WIDTH,
        SCREEN_HEIGHT,
        NULL,
        NULL,
        hInstance,
        NULL);

    if(!hWnd)
        return FALSE;

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    if(!Game_Init(hWnd))
        return 0;

    int done = 0;
    while(!done){
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
            if(msg.message == WM_QUIT)
                done = 1;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
            Game_Run(hWnd);
    }
    return msg.wParam;
}

int Game_Init(HWND hWnd){
    HRESULT result;

    d3d = Direct3DCreate9(D3D_SDK_VERSION);
    if(d3d == NULL){
        MessageBox(hWnd, "Failed to initialise d3d", "Error", MB_OK);
        return 0;
    }

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));

    d3dpp.Windowed = FALSE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
    d3dpp.BackBufferCount = 1;
    d3dpp.BackBufferHeight = SCREEN_HEIGHT;
    d3dpp.BackBufferWidth = SCREEN_WIDTH;
    d3dpp.hDeviceWindow = hWnd;

    d3d->CreateDevice(
        D3DADAPTER_DEFAULT,
        D3DDEVTYPE_HAL,
        hWnd,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        &d3dpp,
        &d3ddev);

    if(d3ddev == NULL){
        MessageBox(hWnd, "Failed to initialise Direct3D device", "Error", MB_OK);
        return 0;
    }

    srand(time(NULL));

    d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);

    d3ddev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer);

    result = d3ddev->CreateOffscreenPlainSurface(
        100,
        100,
        D3DFMT_X8R8G8B8,
        D3DPOOL_DEFAULT,
        &surface,
        NULL);

    if(!result)
        return 1;

    return 1;
}

void Game_Run(HWND hWnd){
    RECT rect;
    int r,g,b;

    if(d3ddev == NULL)
        return;

    if(d3ddev->BeginScene()){
        r = rand() % 255;
        g = rand() % 255;
        b = rand() % 255;
        d3ddev->ColorFill(surface, NULL, D3DCOLOR_XRGB(r,g,b));

        rect.left = rand() % SCREEN_WIDTH / 2;
        rect.right = rect.left + rand() % SCREEN_WIDTH / 2;
        rect.top = rand() % SCREEN_HEIGHT;
        rect.bottom = rect.top + rand() % SCREEN_HEIGHT / 2;

        d3ddev->StretchRect(surface, NULL, backbuffer, &rect, D3DTEXF_NONE);

        d3ddev->EndScene();
    }

    d3ddev->Present(NULL, NULL, NULL, NULL);

    if(KEY_DOWN(VK_ESCAPE))
        PostMessage(hWnd, WM_DESTROY, 0, 0);
}

void Game_End(HWND hWnd){
    surface->Release();

    if(d3ddev != NULL)
        d3ddev->Release();

    if(d3d != NULL)
        d3d->Release();
}

And the link for the post I mentioned above: syntax error : missing ';' before identifier 'PVOID64' when compiling winnt.h

Community
  • 1
  • 1
Ryuu
  • 596
  • 1
  • 5
  • 26

2 Answers2

3

This is because the order of the VC++ include directory, try to put the path windows SDK before DirectX SDK, as below.

enter image description here

zdd
  • 8,258
  • 8
  • 46
  • 75
1

So I think I stumbled across a solution when trying to sort this on a different laptop.

There's something that seems to get installed with the Windows SDK called Windows SDK Configuration Tool. Running that detects which versions of the SDK you have installed then allows you to select which one to use. It then configures all versions of Visual Studio you have to use the selected version.

I think that solved the issue - not had a proper chance to fully check yet - I also uninstalled all versions of Visual Studio I had with all related components and reinstalled just the one I needed (for the time being - might install other versions later to see if that potentially cause a conflict of sorts).

Anyway, just figured I'd leave a possible solution on here for anyone that happens across this thread.

\,,/[>.<]\,,/

Ryuu
  • 596
  • 1
  • 5
  • 26