DRINGEND! Eine Benötigte Ressource ist nicht verfügbar



  • Hallo, 😡
    Ich habe bereits den Beitrag unter dem unten stehenden Link gelesen, leider konnte ich darin keine endgültige Lösung für das Problem finden.

    Soweit ich das überblicken kann gebe ich alle verwendeten Ressourcen wieder frei, daran sollte es also nicht liegen.

    ➡ http://www.c-plusplus.net/forum/viewtopic.php?t=81475&highlight=ben%F6tigte+ressource

    Hier der Quellcode:

    void CBilderkennungView::OnDraw(CDC* pDC) 
    { 
    CBilderkennungDoc* pDoc = GetDocument(); 
    
    ASSERT_VALID(pDoc); 
    // ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen 
    bool pictureOK; 
    
    CMarkerList *pMarkerScanner; 
    CLineList *pLineScanner; 
    
    switch( m_KindOfPicture ) 
    { 
    case 0: 
    { 
    pictureOK = ShowStoredPicture( pDC ); //Bild aus der Datei zeichnen 
    break; 
    } 
    
    case 1: 
    { 
    pictureOK = ShowCamPicture( pDC ); //Bild von der FrameGrabber-Karte zeichnen 
    break; 
    } 
    } 
    
    if( pictureOK ) //Wenn Bild OK... 
    { 
    //Verkettete Liste abarbeiten 
    pLineScanner = m_pFirstLine; 
    
    while( pLineScanner != NULL ) 
    { 
    if( pLineScanner->Line.GetDeleteState() == true ) 
    { 
    RemoveLine( &pLineScanner ); 
    } 
    else 
    { 
    pLineScanner->Line.Show( pDC ); //Linie zeichnen 
    pLineScanner = pLineScanner->pNextLine; 
    } 
    } 
    
    //Verkettete Liste abarbeiten 
    pMarkerScanner = m_FirstMarker; 
    
    while( pMarkerScanner != NULL ) 
    { 
    if( pMarkerScanner->Marker.GetDeleteState() == true ) 
    { 
    RemoveMarker( &pMarkerScanner ); 
    } 
    else 
    { 
    pMarkerScanner->Marker.Show( pDC ); //Makierung zeichnen 
    pMarkerScanner = pMarkerScanner->pNextMarker; 
    } 
    } 
    } 
    
    }
    
    bool CBilderkennungView::ShowCamPicture( CDC *pDC ) 
    {    
        CBitmap tempCBitmap, *pOldBMP; 
        CDC *pTempDC; 
        bool retValue; 
        BOOL bRetCode = 1; 
    
        m_IsPictureUpsideDown = false; 
        retValue = false; 
    
        m_OriginalBitmap = GetBitmap( 0 ); 
    
        // temporäres DC erstellen 
        pTempDC = new CDC; 
        if(( pTempDC != NULL ) && ( m_OriginalBitmap.bmBits != NULL )) 
        { 
    
            bRetCode = pTempDC->CreateCompatibleDC(NULL); 
        //    ASSERT(bRetCode); 
            if( bRetCode != 0 ) 
            { 
                // temp. CBitmap-Objekt fuer geladene Bitmap erstellen 
                tempCBitmap.CreateBitmapIndirect(&m_OriginalBitmap); 
                // Groesse und Anzahl der darstellbaren Farben des Speicher-DCs 
                // auf Bitmap-Aufloesung einstellen 
                pOldBMP = pTempDC->SelectObject(&tempCBitmap); 
    
                // Bitmap-Daten nun aus dem Speicher auf den Bildschirm kopieren 
                pDC->BitBlt( m_PictureStart.x, m_PictureStart.y, m_OriginalBitmap.bmWidth, m_OriginalBitmap.bmHeight, pTempDC, 0, 0, SRCCOPY); 
                retValue = true; 
    
                pTempDC->SelectObject(pOldBMP); 
            } 
            else 
            { 
                return false; 
            } 
        } 
        //DeviceContext Zuweisung aufheben und löschen 
        this->ReleaseDC( pTempDC ); 
        pTempDC->DeleteDC(); 
    
        return retValue; 
    }
    
    void CLine::Show( CDC *pDC ) 
    {    
        CPen *neuerStift, *alterStift; 
        neuerStift = new CPen(PS_SOLID, m_Width, m_Color); 
    
        alterStift = pDC->SelectObject(neuerStift); 
    
        pDC->MoveTo( m_StartPointAbsolute ); 
        pDC->LineTo( m_EndPointAbsolute ); 
        pDC->SelectObject( alterStift ); 
    }
    


  • Hi,

    also ich hab in dem Code zweimal ein

    new
    

    entdeckt, aber kein

    delete
    

    .
    Naja und mir hilft immer bei der Fehlereingrenzung der Debug Mode.



  • OK,
    die delete's hatte ich vergessen, sollte allerdings kein Problem sein, da es sich um lokale Zeiger handelt die beim verlassen der Funktion sowiso gelösch werden. :p
    Ich hab jetzt alle Zeiger an betreffender Stell mit delete gelöscht, gebracht hats aber nichts. 😡



  • Bist du mal im debugmod durchgegangen schritt für schritt und kannst genauer lokalisieren welche Fehlermeldung wo auftaucht, sonst kann man ja nur raten.



  • Du gibst den " neuerStift" nicht mehr frei.
    neuerStift.DeleteObject();


Anmelden zum Antworten