[API] GDI-Objekte entfernen

07/11/2011 - 23:41 von Heinz-Mario Frühbeis | Report spam
Hallo!

Ich dachte mir, das ich vlt. doch mal explicit nachfrage, wie man
GDI-Objekte entfernt.

Basierend auf 'Grafikproblem' habe ich mir "Bear" heruntergeladen.
Die Anz. GDI-Objekte wird beim Start der VB6-IDE mit 432 angegeben.
Wenn ich die Anwendung wieder beende wird die Anz. mit 451 angegeben.

Ich habe _alles_ durchforstet ... ich kann aber kein Leak bezgl. meines
Codes feststellen.
Alle erstellten GDI-Objekte werden wieder erfolgreich entfernt.

Bsp. (VB6):
hdc = CreateCompatibleDC(nDc)
hBmp = CreateCompatibleBitmap(nDc, Width, Height)
hSel = SelectObject(hdc, hBmp)

hFont = CreateFont(9 * 2, 0, 0, 0 _
, ftBold, .FontItalic, .FontUnderline _
, 0, 1, 4, &H10, 2, 4, .FontName)
hFontSel = SelectObject(hdc, hFont)

Vs.1)
rVal = DeleteObject(SelectObject(hdc, hFont))
rVal = DeleteObject(hFont)
rVal = DeleteObject(SelectObject(hdc, hBmp))
rVal = DeleteObject(hBmp)

Vs.2)
rVal = DeleteObject(SelectObject(hdc, hFontSel))
rVal = DeleteObject(hFont)
rVal = DeleteObject(SelectObject(hdc, hBmpSel))
rVal = DeleteObject(hBmp)

Vs.3)
rVal = DeleteObject(hFont)
rVal = DeleteObject(hBmp)

Bei allen Varianten bleiben 19 GDI-Objekte "überzàhlig".
Ich meine, es hàtte ja wenigstens 'ne Änderung der Anz. feststellbar sein
können.

Wie bekomme ich das hin, daß ich die gleiche Anz. GDI-Objekte
Prog.start/Prog.ende habe?

Mit Gruß
Heinz-Mario Frühbeis
 

Lesen sie die antworten

#1 Heinz-Mario Frühbeis
08/11/2011 - 02:51 | Warnen spam
Nachtrag:

Oh man!
Ich habe mir das jetzt mal quasi Stück für Stück vorgenommen.
Und ich denke, das ich es geschafft habe.
Man glaubt ja gar nicht, wo überall Leaks sein können!

Eine Kleinigkeit ist aber noch:
Bsp. bei einer VB6-DLL:
IDE Start ->
GDI-Objekte = 430 bzw. 432 (nach F5)
Ausführung der DLL
Beenden der DLL
GDI-Objekte = 437
Ausführung der DLL
Beenden der DLL
GDI-Objekte = 437 (immer noch und etc.)

Wo kommt dieser Unterschied her, der dann konstant bleibt?

Wàre nett, wenn mir dazu noch was mitteilen könnte.

Ich danke noch mal sehr für den Tipp bezgl. GDI-, User-Objekte!; und
mit Gruß
Heinz-Mario Frühbeis

Ähnliche fragen