compiler error in Verbindung mit DX. Please help



  • Hallo zusammen!

    Hab mal ein kleines Prog zusammengestellt. Es macht nichts anderes, als ein DD7 Object zu erstellen um es gleich wieder freizugeben.

    VC compiliert das Prog auch problemlos, aber beim Linker-Vorgang erhalte ich folgende Fehlermeldung:

    ROG8_3.OBJ : error LNK2001: Nichtaufgeloestes externes Symbol _DirectDrawCreateEx@16
    Debug/Test.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Bitte seht euch doch mal mein kleines Programm durch.

    // PROG8_3.CPP - Creates a DirectDraw object and changes display
    
    // INCLUDES ///////////////////////////////////////////////
    #define WIN32_LEAN_AND_MEAN  
    #define INITGUID
    
    #include <windows.h>   // include important windows stuff
    #include <windowsx.h> 
    #include <mmsystem.h>
    #include <iostream.h> // include important C/C++ stuff
    #include <conio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <memory.h>
    #include <string.h>
    #include <stdarg.h>
    #include <stdio.h>
    #include <math.h>
    #include <io.h>
    #include <fcntl.h>
    
    #include <ddraw.h>  // directX includes
    
    // DEFINES ////////////////////////////////////////////////
    
    // defines for windows 
    #define WINDOW_CLASS_NAME "WINXCLASS"  // class name
    
    #define WINDOW_WIDTH  320              // size of window
    #define WINDOW_HEIGHT 200
    
    // MACROS /////////////////////////////////////////////////
    
    // these read the keyboard asynchronously
    #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
    #define KEY_UP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
    
    // PROTOTYPES /////////////////////////////////////////////
    
    int Game_Init(void *parms=NULL);
    int Game_Shutdown(void *parms=NULL);
    int Game_Main(void *parms=NULL);
    
    // GLOBALS ////////////////////////////////////////////////
    
    HWND main_window_handle = NULL; // save the window handle
    HINSTANCE main_instance = NULL; // save the instance
    char buffer[80];                // used to print text
    LPDIRECTDRAW7 lpdd;   // pointer to direct draw object
    
    // 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
    
    // what is the message 
    switch(msg)
        {   
        case WM_CREATE: 
            {
            // do initialization stuff here
            return(0);
            } break;
    
        case WM_PAINT:
             {
             // start painting
             hdc = BeginPaint(hwnd,&ps);
    
             // end painting
             EndPaint(hwnd,&ps);
             return(0);
            } break;
    
        case WM_DESTROY: 
            {
            // kill the application         
            PostQuitMessage(0);
            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
    
    // WINMAIN ////////////////////////////////////////////////
    
    int WINAPI WinMain( HINSTANCE hinstance,
                        HINSTANCE hprevinstance,
                        LPSTR lpcmdline,
                        int ncmdshow)
    {
    
    WNDCLASS winclass;  // this will hold the class we create
    HWND     hwnd;      // generic window handle
    MSG      msg;       // generic message
    HDC      hdc;       // generic dc
    PAINTSTRUCT ps;     // generic paintstruct
    
    // first fill in the window class stucture
    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;
    
    // register the window class
    if (!RegisterClass(&winclass))
        return(0);
    
    // create the window
    if (!(hwnd = CreateWindow(WINDOW_CLASS_NAME, // class
                              "WinX Game Console",   // title
                              WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                              0,0,     // x,y
                              WINDOW_WIDTH,  // width
                              WINDOW_HEIGHT, // height
                              NULL,    // handle to parent 
                              NULL,    // handle to menu
                              hinstance,// instance
                              NULL)))   // creation parms
    return(0);
    
    // save the window handle and instance in a global
    main_window_handle = hwnd;
    main_instance      = hinstance;
    
    // perform all game console specific initialization
    Game_Init();
    
    // enter main event loop
    while(1)
        {
        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
    
    // shutdown game and release all resources
    Game_Shutdown();
    
    // return to Windows like this
    return(msg.wParam);
    
    } // end WinMain
    
    // WINX GAME PROGRAMMING CONSOLE FUNCTIONS ////////////////
    
    int Game_Init(void *parms)
    {
    // this function is where you do all the initialization 
    // for your game
    
    // create object and test for error
    if (DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)!=DD_OK)
       return(0);
    
    // set cooperation level to windowed mode normal
    if ((lpdd->SetCooperativeLevel(main_window_handle,
        DDSCL_ALLOWMODEX | DDSCL_FULLSCREEN | 
        DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT))!=DD_OK)
        return(0);
    
    // set the display mode
    if ((lpdd->SetDisplayMode(640,480,8,0,0))!=DD_OK)
       return(0);
    
    // return success
    return(1);
    } // end Game_Init
    
    ///////////////////////////////////////////////////////////
    
    int Game_Shutdown(void *parms)
    {
    // this function is where you shutdown your game and
    // release all resources that you allocated
    
    // release the directdraw object
    if (lpdd!=NULL)
       lpdd->Release();
    
    // return success
    return(1);
    } // end Game_Shutdown
    
    ///////////////////////////////////////////////////////////
    
    int Game_Main(void *parms)
    {
    // this is the workhorse of your game it will be called
    // continuously in real-time this is like main() in C
    // all the calls for you game go here!
    
    // check of user is trying to exit
    if (KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE))
        PostMessage(main_window_handle, WM_DESTROY,0,0);
    
    // return success
    return(1);
    } // end Game_Main
    
    ///////////////////////////////////////////////////////////
    

    Ich hab mit DX net so viel Erfahrung, bitte helft mir weiter wenn ihr könnt. Meine Motivation ist jetzt natürlich im Keller.

    MfG



  • Hast Du zu ddraw.lib und dxguid.lib gelinkt und sind die DXSDK-Lib-Verzeichnisse im VC++ "ganz oben"?



  • Ahh, warum haben die Mods die Antworten auf solche Fragen immer noch nicht in der FAQ? Oder war wieder mal jemand zu faul die rauszusuchen?



  • sagmal wieviele unnütze Header includierst du eigentlich??????????????

    du brauchst doch nur windows.h und ddraw.h mehr doch nicht???!!!!????!!!



  • Hallo! Ja klar, hab die Bibliotheken eingebunden. Hat schon jemand versucht das prog bei sich zu linken? Kann das mal jemand tun? Bei mir funktioniert es einfach nicht.

    Dankschö



  • schon wieder so ein "ich progge mir mein game und copy&paste mir den ganzen code wo her. die kommentare mach ich natürlich auf english, ist viel 1337er und wozu auf vernünftige deutsche ausdrucksweise achten?"-kiddie



  • Original erstellt von <Adidas>:
    Hat schon jemand versucht das prog bei sich zu linken?

    OMG - Okay... drück' mich gerade vor'm Aufräumen, also paßt es g'rad'.

    Schnell'n Projekt aufgemacht und ZACK:

    Temporäre Dateien und Ausgabedateien für "cpptzt - Win32 Debug" werden gelöscht.
    --------------------Konfiguration: cpptzt - Win32 Debug--------------------
    Kompilierung läuft...
    ztz.cpp
    x:\coden\projekte\cpptzt\ztz.cpp(109) : warning C4101: 'ps' : Unreferenzierte lokale Variable
    x:\coden\projekte\cpptzt\ztz.cpp(108) : warning C4101: 'hdc' : Unreferenzierte lokale Variable
    Linker-Vorgang läuft...

    cpptzt.exe - 0 Fehler, 2 Warnung(en)

    Alles klar?!?


Anmelden zum Antworten