Debugversion perfekt aber Realeseversion fehlerhaft



  • Hi

    Ich habe ein Programm geschrieben,welches als Debugversion perfekt läuft.
    Wenn ich aber eine Realseversion erstelle kommt diese Fehlermeldung:

    --------------------Konfiguration: DirectDrawV2 - Win32 Release--------------------
    Kompilierung läuft...
    Global.cpp
    MainDatei.cpp
    Methoden.cpp
    Linker-Vorgang läuft...
    MainDatei.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__timeGetTime@0
    Methoden.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__timeGetTime@0
    Methoden.obj : error LNK2001: Nichtaufgeloestes externes Symbol _DirectDrawCreateEx@16
    Methoden.obj : error LNK2001: Nichtaufgeloestes externes Symbol _IID_IDirectDraw7
    Release/DirectDrawV2.exe : fatal error LNK1120: 3 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.
    
    DirectDrawV2.exe - 5 Fehler, 0 Warnung(en)
    

    Hier ist die Methode für die Initialisierung

    BOOL DirectDrawClass::Init(HWND hWnd)
    {
    
        if(FAILED(DirectDrawCreateEx(NULL,(LPVOID*)&lpDD7,IID_IDirectDraw7,NULL)))
        {  
            return Error("Fehler beim Anlegen des DirectDraw-Objekts");
        }
    
        if(FAILED(lpDD7->SetCooperativeLevel(hWnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN)))
        {
            return Error("Fehler beim Setzen des Kooperationsebene");    
        }
    
        if(FAILED(lpDD7->SetDisplayMode(SCR_WIDTH,SCR_HEIGHT,COLOR_DEPTH,0,0)))
        {
            return Error("Fehler beim Setzen des Kooperationsebene");    
        }
    
        DDSURFACEDESC2 ddsd;
    
        ZeroMemory(&ddsd,sizeof(ddsd));
        ddsd.dwSize = sizeof(ddsd);
    
        ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
    
        ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
    
        ddsd.dwBackBufferCount = 1;
    
        if(FAILED(lpDD7->CreateSurface(&ddsd,&lpDDSPrimary,NULL)))
        {
            return Error("Fehler beim Anlegen der primären Oberfläche");
        }
    
        ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
    
        if(FAILED(lpDDSPrimary->GetAttachedSurface(&ddsd.ddsCaps,&lpDDSBackBuffer)))
        {
            return Error("Fehler beim Anlegen des Puffers");
        }
    	DeterminePixelFormat(lpDDSPrimary);
    	srand(timeGetTime());
        return TRUE;
    }
    

    Kann mir jemand sagen,wie ich diese Fehler behebe?



  • Hast Du die selben Projekteinstellungen für Debug und Release?
    Include Verzeichnisse, Additional Dependencies oä



  • Vergleich mal die Linker-Befehlszeilen beider Versionen.



  • Genau da lag das Problem.

    Ich ging davon aus,dass wenn ich für eine Version das einstelle,dass es für die andere Version gleich mit eingestellt ist.

    Hab ich wohl getäuscht.

    Danke



  • vielleicht besser, du haust
    #pragma lib
    in den code, als immer an den linkereinstellungen fummeln zu müssen.



  • was genau bringt denn #pragma lib?



  • Damit kannst du Bibliotheken dazulinken.
    Die Projekteinstellungen sind prinzipiell nicht schlecht, wenn man verschiedene versionen einer bibliothek dazulinken möchte je nachdem was für ein build-pfad gewählt ist.



  • Tobi3000 schrieb:

    was genau bringt denn #pragma lib?

    heißt wohl
    #pragma comment(lib,"libname")
    http://www.spieleprogrammierer.de/phpBB2/viewtopic.php?p=61021
    http://www.mpdvc.de/html.htm#Q96
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_predir_comment.asp

    zum beispiel wenn ich ne socketklasse baue, so mit class Socket drin, die inkludiert die <winsock2.h>, um sachen wie WSAGetLastError zu kennen.
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsagetlasterror_2.asp
    um die zu benutzen, muß ich dann aber auch immer die Ws2_32.lib einbinden.
    dadurch, daß ich in meine "Socket.h" reinschreibe
    #pragma comment(lib,"ws2_32")
    wird die Ws2_32.lib automatisch reingelinkt, wenn ich die "Socket.h" inkludiere und wenn ich's nicht tue, dann nicht.
    nd ich kann den code wunderbar in andere programme pasten und dann geht er einfach, ich brauche nicht beim nächsten programm wieder die linkereinstellungen ändern. und wenn ich drauf spekuliere, irgendwann mal nicht-ms-compiler zu nehmen, isses auch fein, weil der verweis auf die benötigte lib im c++-code steht, da wird der neue compiler warnen und schon weiss ich bescheid (muss dann aber im makefile oder dergleichen das einstellen, was dem #pragma comment (lib...) entspricht), ich muß nicht gegen den linkerfehler laufen und lange rätseln.


Log in to reply