1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

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

Тема в разделе "Разработка игр и приложений к ним", создана пользователем lawliett, 19 фев 2012.

  1. lawliett

    lawliett Гость

    В 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
     
Загрузка...

Поделиться этой страницей