Skip to main content
gamedev.net
🔒 Locked

directx 9 lib error

Started by Raxvan Aug 22, 2005 at 7:49 AM 16 replies 7k views
Original Post
Raxvan
Raxvan
i have a problem running only directx 9 programs. the rest of the programs like programs that use directx 8 libraries work fine.even the simple program does not work. pls help or else i will die :P here is a sample of error: --------------------Configuration: DX Project 1 - Win32 Debug-------------------- Compiling... Main.cpp Linking... Main.obj : error LNK2001: unresolved external symbol _Direct3DCreate9@4 Debug/DX Project 1.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. DX Project 1.exe - 2 error(s), 0 warning(s) code:

#include <d3d9.h>

LPDIRECT3D9             g_pD3D			= NULL;
LPDIRECT3DDEVICE9       g_pD3DDevice	= NULL;

HRESULT InitialiseD3D(HWND hWnd)
{
	//First of all, create the main D3D object. If it is created successfully we 
	//should get a pointer to an IDirect3D8 interface.
    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
	if(g_pD3D == NULL)
	{
        return E_FAIL;
	}

    //Get the current display mode
    D3DDISPLAYMODE d3ddm;
    if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
	{
        return E_FAIL;
	}

	//Create a structure to hold the settings for our device
    D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory(&d3dpp, sizeof(d3dpp));

	//Fill the structure. 
	//We want our program to be windowed, and set the back buffer to a format
	//that matches our current display mode
    d3dpp.Windowed			= TRUE;
    d3dpp.SwapEffect		= D3DSWAPEFFECT_COPY;
    d3dpp.BackBufferFormat	= d3ddm.Format;

	//Create a Direct3D device.
	if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, 
								   D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice)))
    {
        return E_FAIL;
    }
    
    return S_OK;
}

void Render()
{
    if(g_pD3DDevice == NULL)
	{
        return;
	}

    //Clear the backbuffer to a green color
    g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 255, 0), 1.0f, 0);
    
    //Begin the scene
    g_pD3DDevice->BeginScene();
    
    //Rendering of our game objects will go here
    
    //End the scene
    g_pD3DDevice->EndScene();
    
    //Filp the back and front buffers so that whatever has been rendered on the back buffer
	//will now be visible on screen (front buffer).
    g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
}

void CleanUp()
{
    if(g_pD3DDevice != NULL)
	{
        g_pD3DDevice->Release();
		g_pD3DDevice = NULL;
	}

    if(g_pD3D != NULL)
	{
        g_pD3D->Release();
		g_pD3D = NULL;
	}
}

void GameLoop()
{
	//Enter the game loop
    MSG msg; 
    BOOL fMessage;

	PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
	
	while(msg.message != WM_QUIT)
	{
		fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);

		if(fMessage)
		{
			//Process message
			TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
		else
		{
			//No message to process, so render the current scene
			Render();
		}

	}
}

//The windows message handler
LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
		break;
		case WM_KEYUP: 
            switch (wParam)
			{ 
                case VK_ESCAPE:
					//User has pressed the escape key, so quit
	                DestroyWindow(hWnd);
					return 0;
		        break;
            } 
        break;

    }

    return DefWindowProc(hWnd, msg, wParam, lParam);
}

//Application entry point
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
    //Register the window class
    WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, WinProc, 0L, 0L, 
                     GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                     "DX Project 1", NULL};
    RegisterClassEx(&wc);

    //Create the application's window
    HWND hWnd = CreateWindow("DX Project 1", "www.andypike.com: Tutorial 1", 
                              WS_OVERLAPPEDWINDOW, 50, 50, 500, 500,
                              GetDesktopWindow(), NULL, wc.hInstance, NULL);

    //Initialize Direct3D
    if(SUCCEEDED(InitialiseD3D(hWnd)))
    { 
        //Show our window
        ShowWindow(hWnd, SW_SHOWDEFAULT);
        UpdateWindow(hWnd);

		//Start game running: Enter the game loop
		GameLoop();
    }
    
	CleanUp();

	UnregisterClass("DX Project 1", wc.hInstance);
    
	return 0;
}


10x
Armadon
Armadon
Hi there Raxvan,
How are you doing?

The Problem
Linking DirectX libraries

The Solution
1) Make sure you have DirectX9 installed.
2) Make sure that you are linking the correct libraries.

If you are using Visual Studio you can use the following to ease the annoying linking of libraries.
e.g.
#pragma comment(lib, "d3dx9.lib")
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx.lib")


I hope this helps buddy :)
take care.
Raxvan
Raxvan
i have everything possible installed and
yes tnx now is working but i don't understand the problem. why some programs like sdk/samples work and the rest not?.
and why only programs using directx 9?
and if you look in a tutorial you can't find
#pragma comment(lib, "d3dx9.lib")
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx.lib")
why???

load_bitmap_file
load_bitmap_file
Quote:
Original post by Raxvan
i have everything possible installed and
yes tnx now is working but i don't understand the problem. why some programs like sdk/samples work and the rest not?.
and why only programs using directx 9?
and if you look in a tutorial you can't find
#pragma comment(lib, "d3dx9.lib")
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx.lib")
why???


I think it's specific to Visual Studio, that is it won't work on other compilers and isn't a "standard" part of C++ (although the #pragma command itself is, IIRC). I have seen it in tutorials before though, DrunkenHyena used this.

EDIT: Actually, that's probably a stupid possible reason. Maybe you were just looking at a medicore tutorial? Most DirectX tutorials consider the possibility that you're using Visual Studio.
Ray2k
Ray2k
Can I ask a similiar question, I've been doing fine with using Direct3D9 but as soon as I try to include Direct3DX I get lots of compiler errors in the header files.

My includes are as follows:
#include <windows.h>  #include <windowsx.h>#include <stdio.h>#include <math.h>#include <cstdlib>#include <mmsystem.h>#include <ddraw.h>#include <fcntl.h>#include <signal.h>#include <float.h>#include <io.h>#include <d3d9.h>#include <d3dx9.h>#pragma comment(lib, "d3dx9.lib")#pragma comment(lib, "d3d9.lib")#pragma comment(lib, "d3dx.lib")

If I comment out #include everything is fine apart from of course I can't use any Direct3DX9 functions/types etc. When I uncomment it I get about 20 errors, all in d3dx9xof.h and d3dx9math.inl:
------ Build started: Project: d3d2, Configuration: Debug Win32 ------Compiling...d3d2.cppc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(992) : error C2065: 'UINT_PTR' : undeclared identifierc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(992) : error C2146: syntax error : missing ')' before identifier 'p'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(992) : error C2059: syntax error : ')'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(1005) : error C2146: syntax error : missing ')' before identifier 'p'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(1005) : error C2059: syntax error : ')'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(1005) : error C3861: 'UINT_PTR': identifier not found, even with argument-dependent lookupc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(79) : error C2146: syntax error : missing ';' before identifier 'dSize'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(79) : error C2501: '_D3DXF_FILELOADMEMORY::SIZE_T' : missing storage-class or type specifiersc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(79) : error C2501: '_D3DXF_FILELOADMEMORY::dSize' : missing storage-class or type specifiersc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(163) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(182) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(200) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(204) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(222) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(223) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(242) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(244) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(248) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(249) : error C2061: syntax error : identifier 'SIZE_T'c:\Documents and Settings\Ray\My Documents\Visual Studio Projects\d3d2\d3d2.cpp(47) : error C2146: syntax error : missing ';' before identifier 'eye_vector'c:\Documents and Settings\Ray\My Documents\Visual Studio Projects\d3d2\d3d2.cpp(47) : error C2501: 'D3DXVECTOR' : missing storage-class or type specifiersc:\Documents and Settings\Ray\My Documents\Visual Studio Projects\d3d2\d3d2.cpp(47) : error C2501: 'eye_vector' : missing storage-class or type specifiersc:\Documents and Settings\Ray\My Documents\Visual Studio Projects\d3d2\d3d2.cpp(47) : error C2501: 'lookat_vector' : missing storage-class or type specifiersc:\Documents and Settings\Ray\My Documents\Visual Studio Projects\d3d2\d3d2.cpp(47) : error C2501: 'up_vector' : missing storage-class or type specifiersBuild log was saved at "file://c:\Documents and Settings\Ray\My Documents\Visual Studio Projects\d3d2\Debug\BuildLog.htm"d3d2 - 24 error(s), 0 warning(s)---------------------- Done ----------------------    Build: 0 succeeded, 1 failed, 0 skipped

Obviously the last 5 are from my code that won't work because of the problems with loading D3DX.

I've got DirectX's lib and include folders set up right in VC++ and haven't had any problems like this with other aspects of DirectX.

Am I missing another lib or .h? As far as I'm aware I have DX installed ok so I don't think it's that.

Thanks

[edit]As the compiler output suggests I'm using the summer 2004 SDK, which I've just realised, is D3DX supported in it? It contains the d3dx files so I would assume so...[/edit]

[Edited by - Ray2k on August 22, 2005 11:20:42 AM]
Raxvan
Raxvan
although some programs are working i still have errors like this:
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/main.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
main.exe - 2 error(s), 0 warning(s)
error Code:
#include <stdio.h>#include <windows.h>#include <d3dx9.h>#pragma comment(lib, "d3dx9.lib");#pragma comment(lib, "d3d9.lib");#pragma comment(lib, "d3dx.lib");/******************************************************************************// For the sake of simplicity, all variables will be globals. I do not// recommend this in your own code, but since the goal of this article is to// show how to use texture splatting and nothing else, I opted to take the// simplest route possible.//// Rendering is done through the use of DrawPrimitiveUp, but there should be// no performance hit because of the small number of vertices involved.******************************************************************************/// Window class resourcesHWND g_hWnd = NULL;const UINT MENU_EXIT = 9000;const UINT MENU_USE_PIXEL_SHADER = 9001;// Direct3D resourcesIDirect3D9* g_Direct3D = NULL;IDirect3DDevice9* g_Direct3DDevice = NULL;bool g_CanUsePixelShader = true;bool g_UsePixelShader = false;IDirect3DPixelShader9* g_SplatShader = NULL;// Textures to be blendedIDirect3DTexture9* g_Texture1 = NULL;IDirect3DTexture9* g_Texture2 = NULL;IDirect3DTexture9* g_Texture3 = NULL;IDirect3DTexture9* g_Texture4 = NULL;// Alphamaps for the fixed function pipelineIDirect3DTexture9* g_Alphamap1 = NULL;IDirect3DTexture9* g_Alphamap2 = NULL;IDirect3DTexture9* g_Alphamap3 = NULL;IDirect3DTexture9* g_Alphamap4 = NULL;// Alphamaps for the pixel shadersIDirect3DTexture9* g_CombinedAlphamap = NULL;// Interfaces to output text to the screenID3DXFont* g_Font = NULL;ID3DXSprite* g_FontSprite = NULL;// Variables for the frames per second counterDWORD g_LastTime;int g_Frames = 0;int g_FramesPerSecond = 0;// Vertex structure and quadstruct QuadVertex {	float x, y, z;		// Position	float u1, v1;		// Alphamap coordinates	float u2, v2;		// Texture coordinates};const DWORD VertexFVF = D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEX2;QuadVertex g_Vertices[] = {	{ -1, 0, -1, 0, 1, 0, 1 },	{ -1, 0, 1, 0, 0, 0, 0 },	{ 1, 0, -1, 1, 1, 1, 1 },	{ 1, 0, 1, 1, 0, 1, 0 },};//-----------------------------------------------------------------------------// Function prototypes//-----------------------------------------------------------------------------void InitializeWindow(HINSTANCE);void AddMenu();bool InitializeDirect3D();void SetDefaultStates();bool LoadTextures();bool LoadAlphamaps();void CreatePixelShaders();void CreateFont();void Render();void RenderWithShader();void RenderWithoutShader();void RenderText();void CleanUp();LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//-----------------------------------------------------------------------------// Generic entry point//-----------------------------------------------------------------------------int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) {	// Initialization	InitializeWindow(hInstance);	AddMenu();	if(!InitializeDirect3D()) {		CleanUp();		return 1;	}	ShowWindow(g_hWnd, SW_SHOW);	if(!LoadTextures() || !LoadAlphamaps()) {		CleanUp();		return 1;	}	CreatePixelShaders();	CreateFont();	SetDefaultStates();//	g_LastTime = timeGetTime();	// Message pump	MSG msg;	while(true) {		while(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {			if(!GetMessage(&msg, NULL, 0, 0)) {				CleanUp();	  			return 0;	  		}   			TranslateMessage(&msg);   			DispatchMessage(&msg);   		}		Render();		++g_Frames;	//	if(timeGetTime() - g_LastTime >= 1000) {	//		g_LastTime += 1000;	//		g_FramesPerSecond = g_Frames;	//		g_Frames = 0;	//	}		Sleep(0);	}}//-----------------------------------------------------------------------------// Generic window creation//-----------------------------------------------------------------------------void InitializeWindow(HINSTANCE hInstance) {	// Create and register the window class	WNDCLASSEX wndclass;		wndclass.cbSize = sizeof(wndclass);		wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;	wndclass.lpfnWndProc = WndProc;	wndclass.cbClsExtra = 0;	wndclass.cbWndExtra = 0;	wndclass.hInstance = hInstance;	wndclass.hIcon = LoadIcon(NULL,IDI_WINLOGO);	wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);		wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);	wndclass.lpszMenuName = NULL;	wndclass.lpszClassName = "TextureSplatting";	wndclass.hIconSm = LoadIcon(NULL, IDI_WINLOGO);	RegisterClassEx(&wndclass);	// Create the actual window, force a client size of 640x480 for simplicity	RECT clientRect;	clientRect.left = 0;	clientRect.top = 0;	clientRect.right = 640;	clientRect.bottom = 480;	AdjustWindowRect(&clientRect, WS_OVERLAPPEDWINDOW ^ WS_MAXIMIZEBOX ^ WS_THICKFRAME, TRUE);	g_hWnd = CreateWindow("TextureSplatting", "Texture Splatting",	  WS_OVERLAPPEDWINDOW ^ WS_MAXIMIZEBOX ^ WS_THICKFRAME, CW_USEDEFAULT, CW_USEDEFAULT,	  clientRect.right - clientRect.left, clientRect.bottom - clientRect.top,	  NULL, NULL, GetModuleHandle(NULL), NULL);}//-----------------------------------------------------------------------------// Add the menu to the window//-----------------------------------------------------------------------------void AddMenu() {	HMENU hMenu = CreateMenu();		HMENU hSubMenu = CreatePopupMenu();	AppendMenu(hSubMenu, MF_STRING, MENU_EXIT,"&Exit");	AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenu, "&File");	hSubMenu = CreatePopupMenu();	AppendMenu(hSubMenu, MF_STRING | MF_UNCHECKED, MENU_USE_PIXEL_SHADER, "Use &Pixel Shader");	AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenu, "&View");		SetMenu(g_hWnd, hMenu);}//-----------------------------------------------------------------------------// Generic Direct3D initialization//-----------------------------------------------------------------------------bool InitializeDirect3D() {	g_Direct3D = Direct3DCreate9(D3D_SDK_VERSION);	if(g_Direct3D == NULL) {		MessageBox(NULL, "Direct3DCreate9 failed", "Error", MB_OK);		return false;	}	D3DPRESENT_PARAMETERS d3dpp;	memset(&d3dpp, 0, sizeof(D3DPRESENT_PARAMETERS));		D3DDISPLAYMODE d3ddm;	if(FAILED(g_Direct3D->GetAdapterDisplayMode(0, &d3ddm))) {		MessageBox(NULL, "GetAdapterDisplayMode failed", "Error", MB_OK);		return false;	}	d3dpp.AutoDepthStencilFormat = D3DFMT_D16;	d3dpp.BackBufferCount = 1;	d3dpp.BackBufferFormat = d3ddm.Format;	d3dpp.BackBufferHeight = 480;	d3dpp.BackBufferWidth = 640;	d3dpp.EnableAutoDepthStencil = TRUE;	d3dpp.hDeviceWindow = g_hWnd;	d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;	d3dpp.Windowed = TRUE;	if(FAILED(g_Direct3D->CreateDevice(0, D3DDEVTYPE_HAL, g_hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &g_Direct3DDevice)))		if(FAILED(g_Direct3D->CreateDevice(0, D3DDEVTYPE_HAL, g_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_Direct3DDevice)))			MessageBox(NULL, "CreateDevice failed", "Error", MB_OK);	return true;}//-----------------------------------------------------------------------------// Set the render and sampler states and the three matrices//-----------------------------------------------------------------------------void SetDefaultStates() {	g_Direct3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);	g_Direct3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE);	// Allow multiple passes to blend together correctly	g_Direct3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);	g_Direct3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);	g_Direct3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);	g_Direct3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);	// Prevent some ugliness with the alphamaps	g_Direct3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);	g_Direct3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);	g_Direct3DDevice->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(1, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(2, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(2, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(2, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(3, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(3, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(3, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(4, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(4, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);	g_Direct3DDevice->SetSamplerState(4, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);	// Set up the matrices	D3DXMATRIX projection, world, view;	D3DXMatrixPerspectiveFovLH(&projection, D3DX_PI / 4.0f, 640.0f / 480.0f, 1.0f, 10.0f);	g_Direct3DDevice->SetTransform(D3DTS_PROJECTION, &projection);	D3DXMatrixIdentity(&world);	g_Direct3DDevice->SetTransform(D3DTS_WORLD, &world);	D3DXVECTOR3 position(0, 2.5f, -.001f);	D3DXVECTOR3 lookat(0, 0, 0);	D3DXVECTOR3 up(0, 1, 0);	D3DXMatrixLookAtLH(&view, &position, &lookat, &up);	g_Direct3DDevice->SetTransform(D3DTS_VIEW, &view);}//-----------------------------------------------------------------------------// Load the terrain textures//-----------------------------------------------------------------------------bool LoadTextures() {	if(FAILED(D3DXCreateTextureFromFile(g_Direct3DDevice, "texture1.png", &g_Texture1))) {		MessageBox(NULL, "Failed to load 'texture1.png'", "Error", MB_OK);		return false;	}	if(FAILED(D3DXCreateTextureFromFile(g_Direct3DDevice, "texture2.png", &g_Texture2))) {		MessageBox(NULL, "Failed to load 'texture2.png'", "Error", MB_OK);		return false;	}	if(FAILED(D3DXCreateTextureFromFile(g_Direct3DDevice, "texture3.png", &g_Texture3))) {		MessageBox(NULL, "Failed to load 'texture3.png'", "Error", MB_OK);		return false;	}	if(FAILED(D3DXCreateTextureFromFile(g_Direct3DDevice, "texture4.png", &g_Texture4))) {		MessageBox(NULL, "Failed to load 'texture4.png'", "Error", MB_OK);		return false;	}	return true;}//-----------------------------------------------------------------------------// Load the alphamaps//-----------------------------------------------------------------------------bool LoadAlphamaps() {	if(FAILED(D3DXCreateTextureFromFile(g_Direct3DDevice, "alphamap1.tga", &g_Alphamap1))) {		MessageBox(NULL, "Failed to load 'alphamap1.tga'", "Error", MB_OK);		return false;	}	if(FAILED(D3DXCreateTextureFromFile(g_Direct3DDevice, "alphamap2.tga", &g_Alphamap2))) {		MessageBox(NULL, "Failed to load 'alphamap2.tga'", "Error", MB_OK);		return false;	}	if(FAILED(D3DXCreateTextureFromFile(g_Direct3DDevice, "alphamap3.tga", &g_Alphamap3))) {		MessageBox(NULL, "Failed to load 'alphamap3.tga'", "Error", MB_OK);		return false;	}	if(FAILED(D3DXCreateTextureFromFile(g_Direct3DDevice, "alphamap4.tga", &g_Alphamap4))) {		MessageBox(NULL, "Failed to load 'alphamap4.tga'", "Error", MB_OK);		return false;	}	if(FAILED(D3DXCreateTextureFromFile(g_Direct3DDevice, "combinedalphamap.tga", &g_CombinedAlphamap))) {		MessageBox(NULL, "Failed to load 'combinedalphamap.tga'", "Error", MB_OK);		return false;	}	return true;}//-----------------------------------------------------------------------------// Create the pixel shaders if the device supports PS 1.4//-----------------------------------------------------------------------------void CreatePixelShaders() {	D3DCAPS9 caps;	g_Direct3DDevice->GetDeviceCaps(∩︀);	if(caps.PixelShaderVersion >= D3DPS_VERSION(1, 4)) {		ID3DXBuffer* pShader = NULL;		if(FAILED(D3DXAssembleShaderFromFile("splatshader.psh", NULL, NULL, 0, &pShader, NULL))) {			MessageBox(NULL, "D3DXAssembleShaderFromFile failed", "Error", MB_OK);			g_CanUsePixelShader = false;			EnableMenuItem(GetMenu(g_hWnd), MENU_USE_PIXEL_SHADER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);			if(pShader != NULL) pShader->Release();			return;		}		g_Direct3DDevice->CreatePixelShader((DWORD*)pShader->GetBufferPointer(), &g_SplatShader);		pShader->Release();	}	else {		MessageBox(NULL, "Your video card does not support Pixel Shader 1.4.\nYou will only be able to view this example through the Fixed Function Pipeline.", "Warning", MB_OK);		g_CanUsePixelShader = false;		EnableMenuItem(GetMenu(g_hWnd), MENU_USE_PIXEL_SHADER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);	}}//-----------------------------------------------------------------------------// Create the font used to render text//-----------------------------------------------------------------------------void CreateFont() {/*	HDC hDC = GetDC(NULL);	int height = 14 * (GetDeviceCaps(hDC, LOGPIXELSY) / 72);	ReleaseDC(NULL, hDC);	if(FAILED(D3DXCreateSprite(g_Direct3DDevice, &g_FontSprite))) {		MessageBox(NULL, "D3DXCreateSprite failed", "Warning", MB_OK);		return;	}	if(FAILED(D3DXCreateFont(g_Direct3DDevice, height, 0, FW_BOLD, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_Font))) {		MessageBox(NULL, "D3DXCreateFont failed", "Warning", MB_OK);	}	*/}//-----------------------------------------------------------------------------// Render the texture splatted quad and text//-----------------------------------------------------------------------------void Render() {	g_Direct3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x0, 1.0f, 0);	g_Direct3DDevice->BeginScene();	g_Direct3DDevice->SetFVF(VertexFVF);	if(g_UsePixelShader)		RenderWithShader();	else		RenderWithoutShader();	RenderText();	g_Direct3DDevice->EndScene();	g_Direct3DDevice->Present(NULL, NULL, NULL, NULL);}//-----------------------------------------------------------------------------// Render using the pixel shader//-----------------------------------------------------------------------------void RenderWithShader() {	// There are no render states to worry about	g_Direct3DDevice->SetPixelShader(g_SplatShader);	g_Direct3DDevice->SetTexture(0, g_CombinedAlphamap);	g_Direct3DDevice->SetTexture(1, g_Texture1);	g_Direct3DDevice->SetTexture(2, g_Texture2);	g_Direct3DDevice->SetTexture(3, g_Texture3);	g_Direct3DDevice->SetTexture(4, g_Texture4);	g_Direct3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, g_Vertices, sizeof(QuadVertex));}//-----------------------------------------------------------------------------// Render using the fixed function pipeline//-----------------------------------------------------------------------------void RenderWithoutShader() {	// Alphamap: take the alpha from the alphamap, we don't care about the color	g_Direct3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);	g_Direct3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);	// Texture: take the color from the texture, take the alpha from the previous stage	g_Direct3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_SELECTARG1);	g_Direct3DDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);	g_Direct3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);	g_Direct3DDevice->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_CURRENT);	// Disable textures from the pixel shader mode	g_Direct3DDevice->SetTextureStageState(2, D3DTSS_COLOROP, D3DTOP_DISABLE);	g_Direct3DDevice->SetTextureStageState(2, D3DTSS_ALPHAOP, D3DTOP_DISABLE);	// Disable the pixel shader	g_Direct3DDevice->SetPixelShader(NULL);	g_Direct3DDevice->SetTexture(0, g_Alphamap1);	g_Direct3DDevice->SetTexture(1, g_Texture1);	g_Direct3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, g_Vertices, sizeof(QuadVertex));	g_Direct3DDevice->SetTexture(0, g_Alphamap2);	g_Direct3DDevice->SetTexture(1, g_Texture2);	g_Direct3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, g_Vertices, sizeof(QuadVertex));	g_Direct3DDevice->SetTexture(0, g_Alphamap3);	g_Direct3DDevice->SetTexture(1, g_Texture3);	g_Direct3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, g_Vertices, sizeof(QuadVertex));	g_Direct3DDevice->SetTexture(0, g_Alphamap4);	g_Direct3DDevice->SetTexture(1, g_Texture4);	g_Direct3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, g_Vertices, sizeof(QuadVertex));}//-----------------------------------------------------------------------------// Render the status information on the screen//-----------------------------------------------------------------------------void RenderText() {/*	if(g_Font) {		RECT textLocation;		textLocation.top = textLocation.left = 4;		textLocation.bottom = 476;		textLocation.right = 636;		char fpsText[40];		sprintf(fpsText, "Frames Per Second: %d", g_FramesPerSecond);		g_FontSprite->Begin(D3DXSPRITE_SORT_TEXTURE);		g_Font->DrawText(g_FontSprite, fpsText, -1, &textLocation, DT_TOP | DT_LEFT, D3DCOLOR_XRGB(255, 255, 255));		textLocation.top = 18;		if(g_UsePixelShader)			g_Font->DrawText(g_FontSprite, "Pixel Shader Enabled", -1, &textLocation, DT_TOP | DT_LEFT, D3DCOLOR_XRGB(255, 255, 255));		else			g_Font->DrawText(g_FontSprite, "Fixed Function Pipeline Enabled", -1, &textLocation, DT_TOP | DT_LEFT, D3DCOLOR_XRGB(255, 255, 255));		textLocation.top = 32;		g_FontSprite->End();	}	*/}//-----------------------------------------------------------------------------// Release allocated resources//-----------------------------------------------------------------------------void CleanUp() {	if(g_Texture1 != NULL) g_Texture1->Release();	if(g_Texture2 != NULL) g_Texture2->Release();	if(g_Texture3 != NULL) g_Texture3->Release();	if(g_Texture4 != NULL) g_Texture4->Release();	if(g_Alphamap1 != NULL) g_Alphamap1->Release();	if(g_Alphamap2 != NULL) g_Alphamap2->Release();	if(g_Alphamap3 != NULL) g_Alphamap3->Release();	if(g_Alphamap4 != NULL) g_Alphamap4->Release();//	if(g_combinedalphamap != NULL) g_CombinedAlphamap->Release();	if(g_Font != NULL) g_Font->Release();	if(g_FontSprite != NULL) g_FontSprite->Release();	if(g_SplatShader != NULL) g_SplatShader->Release();	if(g_Direct3DDevice != NULL) g_Direct3DDevice->Release();	if(g_Direct3D != NULL) g_Direct3D->Release();}//-----------------------------------------------------------------------------// Window procedure//-----------------------------------------------------------------------------LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {	switch (message) {		case WM_DESTROY:			PostQuitMessage(0);			break;		case WM_COMMAND:			switch(LOWORD(wParam)) {				case MENU_EXIT:					PostQuitMessage(0);					break;				case MENU_USE_PIXEL_SHADER:					if(g_UsePixelShader) {						g_UsePixelShader = false;						CheckMenuItem(GetMenu(g_hWnd), MENU_USE_PIXEL_SHADER, MF_BYCOMMAND | MF_UNCHECKED);					}					else {						g_UsePixelShader = true;						CheckMenuItem(GetMenu(g_hWnd), MENU_USE_PIXEL_SHADER, MF_BYCOMMAND | MF_CHECKED);					}					break;			}			break;		default:			return DefWindowProc(hWnd, message, wParam, lParam);	}	return DefWindowProc(hWnd, message, wParam, lParam);}



What do you all sugest Reinstall my windows or someting else?
DrunkenHyena
DrunkenHyena
Quote:
Original post by Raxvan
although some programs are working i still have errors like this:
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/main.exe : fatal error LNK1120: 1 unresolved externals

When you created the project you created it as a Console app. Console apps expect a main function. Win32 applications use WinMain. Recreate the project as a Win32 project and all should be fine.
Stay Casual,KenDrunken Hyena</FON
DrunkenHyena
DrunkenHyena
Quote:
Original post by Ray2k
My includes are as follows:
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <math.h>
#include <cstdlib>
#include <mmsystem.h>
#include <ddraw.h>
#include <fcntl.h>
#include <signal.h>
#include <float.h>
#include <io.h>
#include <d3d9.h>
#include <d3dx9.h>
<!--QUOTE-->


Don't include ddraw.h, D3D9 and DDraw are not compatible. You don't need to include d3d9.h, it's included by d3dx9.h.
Stay Casual,KenDrunken Hyena</FON
DrunkenHyena
DrunkenHyena
Quote:
Original post by load_bitmap_file
I think it's specific to Visual Studio, that is it won't work on other compilers and isn't a "standard" part of C++ (although the #pragma command itself is, IIRC). I have seen it in tutorials before though, DrunkenHyena used this.

EDIT: Actually, that's probably a stupid possible reason. Maybe you were just looking at a medicore tutorial? Most DirectX tutorials consider the possibility that you're using Visual Studio.


The offical tutorials and samples add the libraries in the project settings. I use the "pragma comment" method because it's more obvious and easy to explain. You don't have to dig around in all the tabs just to see what's included. Also, I find a long line of libraries in a single edit box to be absolutely horrible. Functionally the 2 methods are identical though, so use the method you prefer.

Stay Casual,KenDrunken Hyena</FON
Raxvan
Raxvan
tnx now the problem is solved for the moment
the problem was that i created the cpp file without a project and when i compiled the vc++ automatically created a console project :( next time i will be more careful
DrunkenHyena
DrunkenHyena
Quote:
Original post by Raxvan
tnx now the problem is solved for the moment
the problem was that i created the cpp file without a project and when i compiled the vc++ automatically created a console project :( next time i will be more careful

I'd forgotten about that. I recall being bitten by that exact situation when I was getting started. It's a pretty ridiculous default action for vc++ to take, IMHO.

Stay Casual,KenDrunken Hyena</FON
Ray2k
Ray2k
Quote:
Original post by DrunkenHyena

Don't include ddraw.h, D3D9 and DDraw are not compatible. You don't need to include d3d9.h, it's included by d3dx9.h.


Thanks drunkenhyena, I commented ddraw.h and d3d9.h out but still get the same problem. This is what it looks like now:
#include <windows.h>  #include <windowsx.h>#include <stdio.h>#include <math.h>#include <cstdlib>#include <mmsystem.h>//#include <ddraw.h>#include <fcntl.h>#include <signal.h>#include <float.h>#include <io.h>//#include <d3d9.h>#include <d3dx9.h>//#include <d3dx.h>#pragma comment(lib, "d3dx9.lib")//#pragma comment(lib, "d3d9.lib")//#pragma comment(lib, "d3dx.lib")

I've tried removing all the other .h files, with various combinations of the lib files, all to varying degrees of errors. Trying to follow your tutorial but can't get past this D3DX! I'm still on summer 2004 SDK, could that be a problem?

Thanks
DrunkenHyena
DrunkenHyena
Try this:

#include <d3dx9.h>#include <windowsx.h>#include <stdio.h>#include <math.h>#include <cstdlib>#include <mmsystem.h>#include <fcntl.h>#include <signal.h>#include <float.h>#include <io.h>#pragma comment(lib, "d3dx9.lib")#pragma comment(lib, "d3d9.lib")


If you don't need windowsx.h, I'd remove that too.
Stay Casual,KenDrunken Hyena</FON
Ray2k
Ray2k
Thanks again but it still won't work, I started a new project, this is the entire code:
#include <d3dx9.h>#pragma comment(lib, "d3dx9.lib")#pragma comment(lib, "d3d9.lib")int WINAPI WinMain(	HINSTANCE hinstance,					HINSTANCE hprevinstance,					LPSTR lpcmdline,					int ncmdshow){	MessageBox(NULL, "", "", MB_OK);} 

And it still doesn't compile the header files:
Compiling...source.cppc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(992) : error C2065: 'UINT_PTR' : undeclared identifierc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(992) : error C2146: syntax error : missing ')' before identifier 'p'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(992) : error C2059: syntax error : ')'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(1005) : error C2146: syntax error : missing ')' before identifier 'p'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(1005) : error C2059: syntax error : ')'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9math.inl(1005) : error C3861: 'UINT_PTR': identifier not found, even with argument-dependent lookupc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(79) : error C2146: syntax error : missing ';' before identifier 'dSize'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(79) : error C2501: '_D3DXF_FILELOADMEMORY::SIZE_T' : missing storage-class or type specifiersc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(79) : error C2501: '_D3DXF_FILELOADMEMORY::dSize' : missing storage-class or type specifiersc:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(163) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(182) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(200) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(204) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(222) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(223) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(242) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(244) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(248) : error C2061: syntax error : identifier 'SIZE_T'c:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\d3dx9xof.h(249) : error C2061: syntax error : identifier 'SIZE_T'

Sorry to keep asking what's probably a stupid question, don't worry about it if you can't think of anything else.

Maybe I'm missing the declaration of SIZE_T but when I right click and click on Go To Definition or Declaration it finds it with no problems, the same for UINT_PTR.

Thanks for your help
Ray2k
Ray2k
Hmm, I thought as it seems to be missing the declaration of SIZE_T that I'd include the file it's declared in, basetsd.h. I did this and now it compiles fine... My program doesn't have any worthwhile D3DX in it to test if it actually works yet but the problem seems to be solved for now... I don't understand why I'd have to include that extra header file though, but it seems to work for now.. any ideas why I have to? It's in the normal include folder so there should be no problems finding it.

Thanks for the help, it's much appreciated, now hopefully I can get on with the rest of the tutorials.. and hopefully they'll work!

Thanks again

Ray2k

[edit]I see a spinning textured cube on my screen so I guess it works! Thanks for the help all[/edit]

[Edited by - Ray2k on August 27, 2005 6:34:53 PM]
Raxvan
Raxvan
hi all
Last time i asked about how to make dx9 lib's work on my computer. now they work but there is still a problem. When i want to use sound i get errors like:
Linking...
Game.obj : error LNK2001: unresolved external symbol _GUID_DirectMusicAllTypes
Game.obj : error LNK2001: unresolved external symbol _CLSID_DirectMusicLoader
Game.obj : error LNK2001: unresolved external symbol _IID_IDirectMusicLoader8
Game.obj : error LNK2001: unresolved external symbol _CLSID_DirectMusicPerformance
Game.obj : error LNK2001: unresolved external symbol _IID_IDirectMusicPerformance8
Sound.obj : error LNK2001: unresolved external symbol _IID_IMediaPosition
Sound.obj : error LNK2001: unresolved external symbol _IID_IMediaControl
Sound.obj : error LNK2001: unresolved external symbol _CLSID_FilterGraph
Sound.obj : error LNK2001: unresolved external symbol _IID_IGraphBuilder
Sound.obj : error LNK2001: unresolved external symbol _CLSID_DirectMusicSegment
Sound.obj : error LNK2001: unresolved external symbol _IID_IDirectMusicSegment8
Debug/Unrevealed.exe : fatal error LNK1120: 11 unresolved externals
Error executing link.exe.

Unrevealed.exe - 12 error(s), 15 warning(s)

i have searched the internet for a suitable code to replace my sound code but is impossible to find;
How can i fix this problem FOREVER?
pls help
tnx


Raxvan
Raxvan
i used #pragma comment for the key lib files and still isn't working;porhaps there is a manual method to link the files?or a .make file, is that going to work??
and if i add the dsound.lib file in the project i get a error like : unable to opn dsound.lib even if the lib is copyed in all the kay directores!

[Edited by - Raxvan on August 25, 2005 1:12:36 PM]

Topic Locked

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

Sign in to reply to this topic.