Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Help me compile this!

happy_84khappy_84k Member Posts: 106
hey there...
i'm posting a c++ code which is came with microsoft Directx9 SDK...
when i try to compile it from the original directory it all works and the blue window appears...
but when i copy the cpp file to other diectory and try to compileand link, 2 linking errors occurs

Linking...
13.obj : error LNK2001: unresolved external symbol _Direct3DCreate9@4
Debug/132.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

132.exe - 2 error(s), 0 warning(s)

i'm using visual c++ 6.

this is the code...
[code]

//-----------------------------------------------------------------------------
// File: CreateDevice.cpp
//
// Desc: This is the first tutorial for using Direct3D. In this tutorial, all
// we are doing is creating a Direct3D device and using it to clear the
// window.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#include




//---------------------------------------------------------------------
// Global variables
//---------------------------------------------------------------------
LPDIRECT3D9 g_pD3D = NULL; // Used to create the D3DDevice
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Our rendering device




//---------------------------------------------------------------------
// Name: InitD3D()
// Desc: Initializes Direct3D
//---------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
// Create the D3D object, which is needed to create the D3DDevice.
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;

// Set up the structure used to create the D3DDevice. Most parameters are
// zeroed out. We set Windowed to TRUE, since we want to do D3D in a
// window, and then set the SwapEffect to "discard", which is the most
// efficient method of presenting the back buffer to the display. And
// we request a back buffer format that matches the current desktop display
// format.
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

// Create the Direct3D device. Here we are using the default adapter (most
// systems only have one, unless they have multiple graphics hardware cards
// installed) and requesting the HAL (which is saying we want the hardware
// device rather than a software one). Software vertex processing is
// specified since we know it will work on all cards. On cards that support
// hardware vertex processing, though, we would see a big performance gain
// by specifying hardware vertex processing.
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}

// Device state would normally be set here

return S_OK;
}




//---------------------------------------------------------------------
// Name: Cleanup()
// Desc: Releases all previously initialized objects
//---------------------------------------------------------------------
VOID Cleanup()
{
if( g_pd3dDevice != NULL)
g_pd3dDevice->Release();

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




//---------------------------------------------------------------------
// Name: Render()
// Desc: Draws the scene
//---------------------------------------------------------------------
VOID Render()
{
if( NULL == g_pd3dDevice )
return;

// Clear the backbuffer to a blue color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// Rendering of scene objects can happen here

// End the scene
g_pd3dDevice->EndScene();
}

// Present the backbuffer contents to the display
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}




//---------------------------------------------------------------------
// Name: MsgProc()
// Desc: The window's message handler
//---------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
Cleanup();
PostQuitMessage( 0 );
return 0;

case WM_PAINT:
Render();
ValidateRect( hWnd, NULL );
return 0;
}

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




//---------------------------------------------------------------------
// Name: WinMain()
// Desc: The application's entry point
//---------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
// Register the window class
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"D3D Tutorial", NULL };
RegisterClassEx( &wc );

// Create the application's window
HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 01: CreateDevice",
WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
GetDesktopWindow(), NULL, wc.hInstance, NULL );

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

// Enter the message loop
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}

UnregisterClass( "D3D Tutorial", wc.hInstance );
return 0;
}


[/code]


what is the problem??? can anyone help?
thanks

ak

ak

Comments

  • gautamgautam Member Posts: 642
    Yeah, you need to link to the libraries. I am not sure of how the lib in dx9 is named. It might d3d9.lib, not sure.

    : hey there...
    : i'm posting a c++ code which is came with microsoft Directx9 SDK...
    : when i try to compile it from the original directory it all works and the blue window appears...
    : but when i copy the cpp file to other diectory and try to compileand link, 2 linking errors occurs
    :
    : Linking...
    : 13.obj : error LNK2001: unresolved external symbol _Direct3DCreate9@4
    : Debug/132.exe : fatal error LNK1120: 1 unresolved externals
    : Error executing link.exe.
    :
    : 132.exe - 2 error(s), 0 warning(s)
    :
    : i'm using visual c++ 6.
    :
    : this is the code...
    : [code]
    :
    : //-----------------------------------------------------------------------------
    : // File: CreateDevice.cpp
    : //
    : // Desc: This is the first tutorial for using Direct3D. In this tutorial, all
    : // we are doing is creating a Direct3D device and using it to clear the
    : // window.
    : //
    : // Copyright (c) Microsoft Corporation. All rights reserved.
    : //-----------------------------------------------------------------------------
    : #include
    :
    :
    :
    :
    : //---------------------------------------------------------------------
    : // Global variables
    : //---------------------------------------------------------------------
    : LPDIRECT3D9 g_pD3D = NULL; // Used to create the D3DDevice
    : LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Our rendering device
    :
    :
    :
    :
    : //---------------------------------------------------------------------
    : // Name: InitD3D()
    : // Desc: Initializes Direct3D
    : //---------------------------------------------------------------------
    : HRESULT InitD3D( HWND hWnd )
    : {
    : // Create the D3D object, which is needed to create the D3DDevice.
    : if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
    : return E_FAIL;
    :
    : // Set up the structure used to create the D3DDevice. Most parameters are
    : // zeroed out. We set Windowed to TRUE, since we want to do D3D in a
    : // window, and then set the SwapEffect to "discard", which is the most
    : // efficient method of presenting the back buffer to the display. And
    : // we request a back buffer format that matches the current desktop display
    : // format.
    : D3DPRESENT_PARAMETERS d3dpp;
    : ZeroMemory( &d3dpp, sizeof(d3dpp) );
    : d3dpp.Windowed = TRUE;
    : d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    : d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    :
    : // Create the Direct3D device. Here we are using the default adapter (most
    : // systems only have one, unless they have multiple graphics hardware cards
    : // installed) and requesting the HAL (which is saying we want the hardware
    : // device rather than a software one). Software vertex processing is
    : // specified since we know it will work on all cards. On cards that support
    : // hardware vertex processing, though, we would see a big performance gain
    : // by specifying hardware vertex processing.
    : if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
    : D3DCREATE_SOFTWARE_VERTEXPROCESSING,
    : &d3dpp, &g_pd3dDevice ) ) )
    : {
    : return E_FAIL;
    : }
    :
    : // Device state would normally be set here
    :
    : return S_OK;
    : }
    :
    :
    :
    :
    : //---------------------------------------------------------------------
    : // Name: Cleanup()
    : // Desc: Releases all previously initialized objects
    : //---------------------------------------------------------------------
    : VOID Cleanup()
    : {
    : if( g_pd3dDevice != NULL)
    : g_pd3dDevice->Release();
    :
    : if( g_pD3D != NULL)
    : g_pD3D->Release();
    : }
    :
    :
    :
    :
    : //---------------------------------------------------------------------
    : // Name: Render()
    : // Desc: Draws the scene
    : //---------------------------------------------------------------------
    : VOID Render()
    : {
    : if( NULL == g_pd3dDevice )
    : return;
    :
    : // Clear the backbuffer to a blue color
    : g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
    :
    : // Begin the scene
    : if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    : {
    : // Rendering of scene objects can happen here
    :
    : // End the scene
    : g_pd3dDevice->EndScene();
    : }
    :
    : // Present the backbuffer contents to the display
    : g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
    : }
    :
    :
    :
    :
    : //---------------------------------------------------------------------
    : // Name: MsgProc()
    : // Desc: The window's message handler
    : //---------------------------------------------------------------------
    : LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
    : {
    : switch( msg )
    : {
    : case WM_DESTROY:
    : Cleanup();
    : PostQuitMessage( 0 );
    : return 0;
    :
    : case WM_PAINT:
    : Render();
    : ValidateRect( hWnd, NULL );
    : return 0;
    : }
    :
    : return DefWindowProc( hWnd, msg, wParam, lParam );
    : }
    :
    :
    :
    :
    : //---------------------------------------------------------------------
    : // Name: WinMain()
    : // Desc: The application's entry point
    : //---------------------------------------------------------------------
    : INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
    : {
    : // Register the window class
    : WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
    : GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
    : "D3D Tutorial", NULL };
    : RegisterClassEx( &wc );
    :
    : // Create the application's window
    : HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 01: CreateDevice",
    : WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
    : GetDesktopWindow(), NULL, wc.hInstance, NULL );
    :
    : // Initialize Direct3D
    : if( SUCCEEDED( InitD3D( hWnd ) ) )
    : {
    : // Show the window
    : ShowWindow( hWnd, SW_SHOWDEFAULT );
    : UpdateWindow( hWnd );
    :
    : // Enter the message loop
    : MSG msg;
    : while( GetMessage( &msg, NULL, 0, 0 ) )
    : {
    : TranslateMessage( &msg );
    : DispatchMessage( &msg );
    : }
    : }
    :
    : UnregisterClass( "D3D Tutorial", wc.hInstance );
    : return 0;
    : }
    :
    :
    : [/code]
    :
    :
    : what is the problem??? can anyone help?
    : thanks
    :
    : ak
    :
    : ak
    :

  • happy_84khappy_84k Member Posts: 106
    : Yeah, you need to link to the libraries. I am not sure of how the lib in dx9 is named. It might d3d9.lib, not sure.
    :

    how can i do that???
    ak

  • HEPHEP Member Posts: 113
    : : Yeah, you need to link to the libraries. I am not sure of how the lib in dx9 is named. It might d3d9.lib, not sure.
    : :
    :
    : how can i do that???
    : ak
    :
    Go to: Project->Settings->Link
    Add "d3d9.lib" in the edit box named "Object/library modules:"

Sign In or Register to comment.