C++ DirectX skipped when looking for precompiled header

  • C/C++
  • Thread starter Superposed_Cat
  • Start date
  • Tags
    C++
In summary: Wnd = hPrevInstance; return hWnd; }In summary, the user attempted to use Direct X in a Windows environment, but ran into an error. The user tried various solutions online but none worked. The user eventually found the solution by including the basic Windows header files and the Direct3D header file. The user also defined the screen resolution and included the Direct3D Library file. The user registered the class and declared the WindowProc function.
  • #1
Superposed_Cat
388
5
Hi all, I main c# and XNA, but XNA is really outdated and requires the player (I'm using XNA for game making) to install it, i wanted to use something windows native so i decided to choose Direct X because i knew some c++. I copied and pasted code to open a blank window to look through but I get the error:

"Warning 1 warning C4627: '#include <windows.h>': skipped when looking for precompiled header use c:\users\e\documents\visual studio 2012\projects\first directx\first directx\first directx.cpp 2 1 first directx"

now tried a different code sample from a different site and had the same issue. I was under the impression that direct x being native wouldn't need special include paths. I have $(IncludePath);$(DXSDK_DIR)Include under additional include directories and $(LibraryPath);$(DXSDK_DIR)Lib\x86 under the using directories, what am i doing wrong? I have googled the issue and every variation of my problem takes me to the same stackoverflow page. thanks in advance.
 
Technology news on Phys.org
  • #2
Superposed_Cat said:
I have googled the issue and every variation of my problem takes me to the same stackoverflow page.

Hmmm ... googling "visual studio C4627" took me straight to the Microsoft page that explains what the error means, and gives two simple ways to fix it.

http://msdn.microsoft.com/en-us/library/bb531441(v=vs.90).aspx
 
  • Like
Likes 1 person
  • #3
oh, tanks. i just googled the error message and not the actual error value.
 
  • #4
aright second question if no body minds is does anyone know the location of d3dx9.h?
 
  • #5
Superposed_Cat said:
aright second question if no body minds is does anyone know the location of d3dx9.h?
Have you downloaded the DirectX SDK? Here's a link to the June, 2010 release: http://www.microsoft.com/en-us/download/details.aspx?id=6812

I'm not sure if that's the latest release or the release that you need for your version of VS. If it's not, do a web search for DirectX SDK. They have a developer center that should have a link to whatever version you need.
 
  • #6
I did all that. i got the error "unexpected end of file, did you forget to add "include "stdfx.h""?" so i added it then i get :
Error 1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup C:\Users\E\Documents\Visual Studio 2012\Projects\hopes run\hopes run\MSVCRTD.lib(crtexe.obj) first
 
  • #7
literally reinstalled directx sdk and c++.literally reinstalled directx sdk and c++.
 
  • #8
Give this a shot...
In the Visual Studio IDE, open Solution Explorer.
Select the project.
Right click the project, and select Properties, which should be the last thing on the right-click menu.
On Property Pages for the project, under Configuration Properties, click C/C++.
Under C/C++, select Precompiled Headers.
In the pane on the right, the first thing listed is Precompiled Header, which has a pull-down menu.
Select Not Using Precompiled Header. The other choices are Create and Use.

I'm currently using VS 10. If you're using a different version, you might see something different.

Let me know if that helps out any.
 
  • #9
nope, sorry i thank you for the advie anyway, twas good.

"Error 1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup C:\Users\E\Documents\Visual Studio 2012\Projects\first directx\first directx\MSVCRTD.lib(crtexe.obj) first directx
"

thats the new error
 
  • #10
Code:
// include the basic windows header files and the Direct3D header file
#include <stdafx.h>
#include <windows.h>
#include <windowsx.h>
#include <d3d9.h>

// define the screen resolution
#define SCREEN_WIDTH  800
#define SCREEN_HEIGHT 600

// include the Direct3D Library file
#pragma comment (lib, "d3d9.lib")

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 = 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,
                          L"WindowClass",
                          L"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)
    {
        while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        if(msg.message == WM_QUIT)
            break;

        render_frame();
    }

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


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


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

my code.

if anyone could please look thorugh it/try compile it to see if they have issues. I really want to learn this engine.
 
Last edited:
  • #11
Your Visual Studio project is configured for a console application. So the linker expects a main() entry point. While your C++ code is for a GUI application, whose entry point is WinMain(). Change the project properties to match your code; or recreate the project, making sure you specify the correct application type (GUI/Windows).
 
  • Like
Likes 1 person
  • #12
Thanks. I did everything you guys said, which solved it, but I am getting the error:
MSB6006: "link.exe" exited with code 1120. this is in a win32 project. precompiled headers switched off.
 
  • #13
MSB6006 is a message from the build system. You should also get a message from the linker, prefixed with LNK, that explains what the error is. Assuming that the exit code would be equal to the error number, and googling for LNK1120, I get this: http://msdn.microsoft.com/en-us/library/z98k84c3.aspx So you still have some unresolved externals, and other messages from the linker should tell you what they are.
 
  • Like
Likes 1 person
  • #14
Thanks again, your obdurate helpfulness is unparalleled all of you.
 

FAQ: C++ DirectX skipped when looking for precompiled header

Why am I getting the error "C++ DirectX skipped when looking for precompiled header"?

This error occurs when the compiler is unable to find a precompiled header for the C++ DirectX library. This can happen if the library was not properly installed or if there is an error in the code that is preventing the compiler from locating the precompiled header.

How can I fix the "C++ DirectX skipped when looking for precompiled header" error?

To fix this error, make sure that the C++ DirectX library is properly installed and that the correct path to the precompiled header is specified in your code. You may also need to check for any errors in your code that could be causing the compiler to skip the precompiled header.

Can I use C++ DirectX without a precompiled header?

While it is technically possible to use C++ DirectX without a precompiled header, it is not recommended. Precompiled headers can greatly improve the compilation speed of your code and also help to avoid errors. It is best to resolve any issues with the precompiled header rather than trying to work around it.

Why is the compiler looking for a precompiled header for C++ DirectX?

The compiler is looking for a precompiled header for C++ DirectX because it is a large library with many dependencies. Using a precompiled header can greatly improve the compilation speed by reducing the need to repeatedly compile the same code. This is why it is a common practice for large libraries like C++ DirectX to use precompiled headers.

I have a precompiled header for C++ DirectX, but I am still getting the error. What should I do?

If you have a precompiled header for C++ DirectX but are still getting the error, make sure that the path to the precompiled header is correct in your code. You may also need to check for any errors in your code that could be causing the compiler to skip the precompiled header. If the issue persists, you may need to reinstall the C++ DirectX library or consult with other developers for further assistance.

Similar threads

Replies
0
Views
1K
Replies
7
Views
13K
Replies
4
Views
3K
Replies
14
Views
32K
Replies
5
Views
7K
Replies
16
Views
4K
Back
Top