Avatar billede baltazar_ Nybegynder
10. maj 2003 - 10:53 Der er 19 kommentarer

fejl i program ?

Jeg for flg. fejl når jeg loader et billede ind i et static area.

Unhandlet exeption in bitmap.exe (msvcrtd.dll) 0xC0000005 acces violation.

hvad kan dette skyldes, det har virket før men pludseligt vil den ikke mere og kommer med dette pjat.
Kan denne DLL fil være dårlig ?
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 11:14 #1
det er ikke dll`en  så meget har jeg da fundet ud af.

i STDCORE  siger den fejlen kommer når dette executes.

stringSrc.GetData()->nRefs < 0)

så mon det er her når jeg henter et nyt billede frem den gør det.



    CString    file;
    file.Empty();
    m_com.ShowOpen();
    file=m_com.GetFileName();
    file.TrimRight();

    if(m_hBmpNew != NULL )
        DeleteObject(m_hBmpNew);
    sourcex=sourcey=0;//

    if(file.IsEmpty())
AfxMessageBox("Please Select a picture file");
        else{
            if(file.Right(3)!="bmp")
                AfxMessageBox("Please Select a .bmp file");
            else
            {
    m_hBmpNew =    (HBITMAP) LoadImage(
    AfxGetInstanceHandle(),  // handle to instance
    file,  // name or identifier of the image (root is where project is)
    IMAGE_BITMAP,        // image types
    0,    // desired width
    0,    // desired height
    LR_LOADFROMFILE);
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 11:16 #2
det virker som om den ikke nulstiller CString file eller hukommelsen ikke tømmes måske
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 11:21 #3
i debuggeren stopper den her

10217A50 8B 01                mov        eax,dword ptr [ecx]
Avatar billede soreno Praktikant
10. maj 2003 - 11:24 #4
Det er vel denne det er galt med:
    m_hBmpNew =    (HBITMAP) LoadImage(
    AfxGetInstanceHandle(),  // handle to instance
    file,  // name or identifier of the image (root is where project is)
    IMAGE_BITMAP,        // image types
    0,    // desired width
    0,    // desired height
    LR_LOADFROMFILE);


?

(Prøv at sætte nogle dialogbokse ind strategiske steder så du kan finde udaf hvilken linie der giver problemet)
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 11:43 #5
ok har nu fundet ud af at det er her den går galt, efter jeg første gang har hentet et billede ind og derefter vil udskifte billedet med et ny. så går det galt herfra

    file.TrimRight(); // dette kan den ikke finde ud af

    if(m_hBmpNew != NULL )
        DeleteObject(m_hBmpNew);
    sourcex=sourcey=0;//

    if(file.IsEmpty())
AfxMessageBox("Please Select a picture file");
        else{
            if(file.Right(3)!="bmp")
                AfxMessageBox("Please Select a .bmp file");
            else
            {
    m_hBmpNew =    (HBITMAP) LoadImage(
    AfxGetInstanceHandle(),  // handle to instance
    file,  // name or identifier of the image (root is where project is)
    IMAGE_BITMAP,        // image types
    0,    // desired width
    0,    // desired height
    LR_LOADFROMFILE);



hvad kan jeg gøre ved dette,  nogle forslag
Avatar billede soreno Praktikant
10. maj 2003 - 11:46 #6
Prøv at skrive "file" ud i en dialogboks - så du kan se hvad den indeholder (måske indeholder den noget garbage). Den skulle vel gerne indholde det filnavn der vælges med "m_com.GetFileName();" ?
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 12:05 #7
når jeg gør således

AfxMessageBox( file );
file.TrimRight(); // dette kan den ikke finde ud af

så udskirver den stien til filen læseligt og alt ser nårmanlt ud
dette skriver den i file i min popup

file c:/calibrate.bmp  som det skal være og
så går den kold med dette

Unhandlet exeption in bitmap.exe (MFC42D.dll) 0xC0000005 acces violation.

jeg kom vist til at skrive MVSCRTD først.  UPS
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 12:34 #8
underligt,  jeg flyttede nogle timere og nu virker det
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 12:37 #9
okey  det gjorde det så ikke aligevel. Nu crasher den bar enår jeg starter disse timere i stedet
Avatar billede soreno Praktikant
10. maj 2003 - 12:41 #10
Dvs. dit program er flertrådet ?

Så er det jo straks mere besværligt at finde fejlen.
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 12:44 #11
ja desværre  hehe
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 12:49 #12
hvorledes kan man i vc++ se hvad der prøver at bruge en dll fil og hvornår ?

findes der information om den slags ?
Avatar billede soreno Praktikant
10. maj 2003 - 12:54 #13
Du kan finde mange gode debug utils her:
http://www.systernals.com/ntw2k/utilities.shtml

Du kan muligvis få svaret med:
http://www.systernals.com/ntw2k/freeware/listdlls.shtml

Ellers kan du med:
http://www.systernals.com/ntw2k/source/filemon.shtml
(men det giver *masser* af oplysninger - jeg kan ikke huske om man kan filtrere i gratisversionen).
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 13:53 #14
sø kører det, det må have været en timer der gik ind og læste fra en buffer samtidigt med at der blev skrevet i buffren.
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 13:54 #15
nu jeg har fat i dig, kender du til hvordan man finder et icon`s midtpunkt og trækker cpoint ud fra det punkt ?
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 14:05 #16
dvs jeg har fundet ud af at hente point fra icon men mangler nu at finde ud af om dette punkt er i rect[x][y]

jeg har gjort således:

laver rects således

    rect[x][y].SetRect(x*(nWidth/nRects)+rectlayer.left, y*(nHeight/nRects)+rectlayer.top, (x+1)*(nWidth/nRects)+rectlayer.left-1, (y+1)*(nHeight/nRects)+rectlayer.top-1);

derefter.

::GetWindowRect((HWND )m_hIconposition, &rectlayer);
CRect cr = rectlayer;

CPoint ptl = cr.TopLeft();
CPoint pbr = cr.BottomRight();
//    FillRect(dc,&rect[2][2],(HBRUSH)GetStockObject(WHITE_BRUSH));
    if(rect[x][y].PtInRect(ptl) && rect[x][y].PtInRect(pbr))
    { // iconet er inden for rect[i][j]
//      IconIsInRectGrid(i, j);
        AfxMessageBox("i");
    }



 
        if(rect[x][y].PtInRect(point))

        {

    if(rect[x][y].PtInRect(ptl) && rect[x][y].PtInRect(pbr))
    { // iconet er inden for rect[i][j]
//      IconIsInRectGrid(i, j);
        AfxMessageBox("i");
    }
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 14:08 #17
fremgangsmåden er således at jeg har et stort rect ( rectlayer) som derefter bliver indelt i rect[x][y] således.

rect[x][y].SetRect(x*(nWidth/nRects)+rectlayer.left, y*(nHeight/nRects)+rectlayer.top, (x+1)*(nWidth/nRects)+rectlayer.left-1, (y+1)*(nHeight/nRects)+rectlayer.top-1);

nu har jeg behov for at finde ud af om mit icon ( m_hIconposition ) er inde for i området  rect[x][y].
og hvis det er så skal den komme med en afxmessagebox der fortæller hvilket af rect[][] den er i.
Avatar billede soreno Praktikant
10. maj 2003 - 15:12 #18
Du bør kigge på diverse synkroniseringsmekanismer (EnterCriticalSection og lign.). Det er et forholdsvis kompliseret emne men essentielt at forstå når man arbejder med tråde.

Jeg har ikke lige tid til at sætte min ind i det sidste kode nu - prøv at oprette et nyt spørgsmål.
Avatar billede baltazar_ Nybegynder
10. maj 2003 - 15:14 #19
ok tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester