vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2020
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Wie lange "leben" in VB6 DeviceContext und bitmap? 
Autor: Protolus
Datum: 18.03.20 15:03

Habe einen Graphik-Editor programmiert. Alles soweit gut. Da ich mit vielen Device-Contexten und bitmaps arbeite stellt sich die Frage: Muss ich die am Ende des Programms zu "nothing" machen oder werden von Windows "gekillt"?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Wie lange "leben" in VB6 DeviceContext und bitmap? 
Autor: Souffleurlos
Datum: 18.03.20 17:51

Hallo,
sind sie erzeugt werden sie nur durch DeleteObject() der Winapi wieder gelöscht. Tust Du das nicht explizit löschen, verbauen sie mit der Zeit deinen Speicher und das Programm stürzt ab.

Dim hDC As Long
Dim hBtm As Long

hDC = CreateKompatibleDC(GetDC(hWnd))
hBtm = CreateBitMap( hDC, ... )

DeleteObject(hDC, hBtm)

etc.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Wie lange "leben" in VB6 DeviceContext und bitmap? 
Autor: Protolus
Datum: 19.03.20 15:50

Danke für die Antwort.

Hab mir sowas schon gedacht.

Mir ist aber eines noch nicht ganz klar:

Wenn ich das Programm mit der VB-Anweisung "End" beende,
bleiben dann Device Context und Bitmaps im Speicher bestehen
oder "räumt" VB bei Programmbeendigung "alles auf"??
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Wie lange "leben" in VB6 DeviceContext und bitmap? 
Autor: Souffleurlos
Datum: 19.03.20 16:25

Hallo,

END ist ein Schlüsselwort von VBA und es räumt auf, in der Tat, allerdings nur auf der ROT (runnig object table) in ungefähr: ObjPtr->Queryinterface->Release(). Es löst also das Mainobjekt der Anwendung auf.

Angefordcerter GDI-Speicher wird aber durch das Betetriebssystem freigegeben, wenn DeleteObject( Handle-des-GDIGObjekts ) aufgerufen wird. Sonste bleiben die Objekte erhalten und müllen damit den GDI-Speicher zu.

GDI-Speicher fressen:
DeviceContext,
Pens
Bitmaps
Brushs
Lines
Shapes
uvam.

Deswegen: GDI-Objekt erzeugen, verwenden, sofort wieder löschen, dann ist man auf der sicheren Seite
GDI-Speichermangel ist ein schwer zu lokalisierender Fehler, der aber sicher zum Absturz führt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2020 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel