Ссылка На Неразрешенный Символ Directdrawcreate

  • Автор темы lawliett
  • Дата начала
L

lawliett

#1
В MS VS2010 при компиляции кода выдает ошибку :

Ошибка 3 error LNK2019: ссылка на неразрешенный внешний символ _DirectDrawCreateEx@16 в функции "int __cdecl Game_Init(void *,int)" (?Game_Init@@YAHPAXH@Z) C:\Documents and Settings\Admin\мои документы\visual studio 2010\Projects\NOW\NOW\demo7_7.obj

Source:
C++:
// DEMO6_1.CPP basic DirectDraw initialization demo

// INCLUDES ///////////////////////////////////////////////

#define WIN32_LEAN_AND_MEAN // just say no to MFC

#define INITGUID // make sure directX guids are included

#include <windows.h>  // include important windows stuff
#include <windowsx.h> 
#include <mmsystem.h>
#include <iostream> // include important C/C++ stuff


#include <ddraw.h> // include directdraw

// DEFINES ////////////////////////////////////////////////

// defines for windows 
#define WINDOW_CLASS_NAME "WINCLASS1"

// default screen size
#define SCREEN_WIDTH	640 // size of screen
#define SCREEN_HEIGHT  480
#define SCREEN_BPP	 8	// bits per pixel
#define MAX_COLORS	 256 // maximum colors

// TYPES //////////////////////////////////////////////////////

// basic unsigned types
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned char UCHAR;
typedef unsigned char BYTE;

// MACROS /////////////////////////////////////////////////

#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code)  ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

// initializes a direct draw struct
#define DD_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct)); ddstruct.dwSize=sizeof(ddstruct); }

// GLOBALS ////////////////////////////////////////////////
HWND	 main_window_handle = NULL; // globally track main window
HINSTANCE hinstance_app	 = NULL; // globally track hinstance

// directdraw stuff

LPDIRECTDRAW7		 lpdd		 = NULL;  // dd object
LPDIRECTDRAWSURFACE7 lpddsprimary = NULL;  // dd primary surface
LPDIRECTDRAWSURFACE7 lpddsback	= NULL;  // dd back surface
LPDIRECTDRAWPALETTE  lpddpal	 = NULL;  // a pointer to the created dd palette
LPDIRECTDRAWCLIPPER  lpddclipper = NULL;  // dd clipper
PALETTEENTRY		 palette[256];		 // color palette
PALETTEENTRY		 save_palette[256];	 // used to save palettes
DDSURFACEDESC2		ddsd;				 // a direct draw surface description struct
DDBLTFX			  ddbltfx;			  // used to fill
DDSCAPS2			 ddscaps;			  // a direct draw surface capabilities struct
HRESULT			  ddrval;				// result back from dd calls
DWORD				 start_clock_count = 0; // used for timing

// these defined the general clipping rectangle
int min_clip_x = 0,						 // clipping rectangle 
max_clip_x = SCREEN_WIDTH-1,
min_clip_y = 0,
max_clip_y = SCREEN_HEIGHT-1;

// these are overwritten globally by DD_Init()
int screen_width = SCREEN_WIDTH,			// width of screen
screen_height = SCREEN_HEIGHT,		  // height of screen
screen_bpp	= SCREEN_BPP;			 // bits per pixel


char buffer[80];					 // general printing buffer

// FUNCTIONS //////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd, 
UINT msg, 
WPARAM wparam, 
LPARAM lparam)
{
// this is the main message handler of the system
PAINTSTRUCT		ps;		// used in WM_PAINT
HDC				hdc;	// handle to a device context
char buffer[80];		// used to print strings

// what is the message 
switch(msg)
{	
case WM_CREATE: 
{
// do initialization stuff here
// return success
return(0);
} break;

case WM_PAINT: 
{
// simply validate the window 
hdc = BeginPaint(hwnd,&ps);	 

// end painting
EndPaint(hwnd,&ps);

// return success
return(0);
} break;

case WM_DESTROY: 
{

// kill the application, this sends a WM_QUIT message 
PostQuitMessage(0);

// return success
return(0);
} break;

default:break;

} // end switch

// process any messages that we didn't take care of 
return (DefWindowProc(hwnd, msg, wparam, lparam));

} // end WinProc

///////////////////////////////////////////////////////////

int Game_Main(void *parms = NULL, int num_parms = 0)
{
// this is the main loop of the game, do all your processing
// here

// for now test if user is hitting ESC and send WM_CLOSE
if (KEYDOWN(VK_ESCAPE))
SendMessage(main_window_handle,WM_CLOSE,0,0);

// return success or failure or your own return code here
return(1);

} // end Game_Main

////////////////////////////////////////////////////////////

int Game_Init(void *parms = NULL, int num_parms = 0)
{
// this is called once after the initial window is created and
// before the main event loop is entered, do all your initialization
// here

// create IDirectDraw interface 7.0 object and test for error
if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)))
return(0);

// set cooperation to normal since this will be a windowed app
lpdd->SetCooperativeLevel(main_window_handle, DDSCL_NORMAL);

// return success or failure or your own return code here
return(1);

} // end Game_Init

/////////////////////////////////////////////////////////////

int Game_Shutdown(void *parms = NULL, int num_parms = 0)
{
// this is called after the game is exited and the main event
// loop while is exited, do all you cleanup and shutdown here

// simply blow away the IDirectDraw4 interface
if (lpdd)
{
lpdd->Release();
lpdd = NULL;
} // end if

// return success or failure or your own return code here
return(1);

} // end Game_Shutdown

// WINMAIN ////////////////////////////////////////////////
int WINAPI WinMain(	HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{

WNDCLASSEX winclass; // this will hold the class we create
HWND	  hwnd;	 // generic window handle
MSG		  msg;		 // generic message
HDC		hdc;	 // graphics device context

// first fill in the window class stucture
winclass.cbSize		 = sizeof(WNDCLASSEX);
winclass.style			= CS_DBLCLKS | CS_OWNDC | 
CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc	= WindowProc;
winclass.cbClsExtra		= 0;
winclass.cbWndExtra		= 0;
winclass.hInstance		= hinstance;
winclass.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor		= LoadCursor(NULL, IDC_ARROW); 
winclass.hbrBackground	= (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName	= NULL;
winclass.lpszClassName	= WINDOW_CLASS_NAME;
winclass.hIconSm		= LoadIcon(NULL, IDI_APPLICATION);

// save hinstance in global
hinstance_app = hinstance;

// register the window class
if (!RegisterClassEx(&winclass))
return(0);

// create the window
if (!(hwnd = CreateWindowEx(NULL,				 // extended style
WINDOW_CLASS_NAME,	 // class
"DirectDraw Initialization Demo", // title
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0,	 // initial x,y
400,300, // initial width, height
NULL,	 // handle to parent 
NULL,	 // handle to menu
hinstance,// instance of this application
NULL)))	// extra creation parms
return(0);

// save main window handle
main_window_handle = hwnd;

// initialize game here
Game_Init();

// enter main event loop
while(TRUE)
{
// test if there is a message in queue, if so get it
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{ 
// test if this is a quit
if (msg.message == WM_QUIT)
break;

// translate any accelerator keys
TranslateMessage(&msg);

// send the message to the window proc
DispatchMessage(&msg);
} // end if

// main game processing goes here
Game_Main();

} // end while

// closedown game here
Game_Shutdown();

// return to Windows like this
return(msg.wParam);

} // end WinMain

///////////////////////////////////////////////////////////
Нашел похожую тему, но не помогло http://codeby.net/forum/threads/41075.html