![]() |
Delphi6 + MakeObjectInstance FreeObjectInstance
Hi!
Seit ich mein Projekt auf Delphi 6 konvertiert hab bekomm ich immer die Warnung "Symbol 'MakeObjectInstance is deprecated" (detto für FreeObjectInstance). Gibt es seit Delphi6 neue Möglichkeiten einem Fenster mittels SubClassing eine Objekt-Methode als neue Window-Procedure unterzuschieben :?: [edit=Sakura]Leerzeichen in Überschrift gesetzt, zwecks Listendarstellung[/edit] |
Ich hab zwar keine Lösung aber ein ähnliches Problem :).
In meinem Projekt wird es verursacht durch eine Komponente die wohl nicht ganz Delphi6-Kompatibel ist. Meine Warnmeldung: Symbol 'AllocateHWnd' is deprecated Symbol 'DeAllocatedHWnd' is deprecated Da meine Suche, vor einigen Wochen, nach einer Lösung vergeblich war und es auch mit diesen Warnungen einwandfrei funktioniert, hab ich es bisher einfach ignoriert. Aber wenn ich nicht der einzige bin, mit so einer art Fehlermeldung gibts ja vielleicht noch Hoffnung :). |
deprecated bedeutet, dass die Funktion "veraltet" ist. In der Online Hilfe steht sicherlich näheres zu diesen Funktionen, und ob sie überhaupt noch gebraucht werden.
Die Funktionen AllocateHWnd und DeallocateHWnd wurden aus der Forms.pas in die Classes.pas verschoben. Aus Kompatiblitätsgründen ist die Aufruf der Forms.De/AllocateHWnd noch vorhanden. Es wird eine Warnung ausgegeben. Eine Lösung ist, die Reihenfolge der Units bei der Uses-Anwendung zu verauschen. Also zuerst Forms und dann Classes. Eine andere Lösung ist, dem Aufruf den Unitnamen voranzustellen.
Delphi-Quellcode:
wnd := Classes.AllocateHWnd(...);
Classes.DeallocateHWnd(Wnd); |
Zitat:
Zitat:
|
Zitat:
Hätte man ja vielleicht auch über die Windows-Suchfunktion rausfinden können, das der Befehl ausgelagert wurde ... :angle2: @Motzi Zitat:
|
Zitat:
|
@X-Dragon:
Danke für den Link :!: Der hat mir mehr geholfen, als Du es auch nur erahnen kannst. ![]() Titel des Beitrages des Links VCL leak fix for dynamic DLLs. Jeder, der mit der VCL mehr macht, als eine einfache Anwendung zu erstellen, sollte sich diesen Link genauer anschauen! Leider darf die Lösung nicht weitergegeben werden, da diese den auisdrücklich :!: Lizenzbesdingungen von Borland unterliegt. D.h., diese muss von jedem manuell eingearbeitet werden. Der Aufwand liegt bei ca. 10 Minuten, sollte aber gemacht werden. Ich suche seit über einem Jahr nach einem Speicherloch in einer unserer Serverkomponenten und das scheint die Lösung zu sein. So ruhig lief unser Server noch nie... Nutzt die Lösung. Mal sehen, ob sich noch etwas besseres findet. Voraussetzung für die Nutzung der Lösung sind die Source-Codes der VCL, d.h., eine Personal (oder Standard) Edition muss weiterhin mit dem Fehler leben. Trost: Dieser Fehler existiert auch in allen MFC und Turbo Pascal :shock: Anwendungen, wer hätte das gedacht... ...:cat:... P.S.: In Delphi 7 besteht der Fehler scheinbar noch immer :shock: Sämtliche Änderungen durch die angegebene Quelle fehlen... |
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Für die Programmierer, die den Classes.pas Quellcode nicht haben (Personal Edition) oder die die Datei nicht verändern wollen, habe ich eine Unit geschrieben, die die Funktionen MakeObjectInstance und FreeObjectInstance hooked. Somit wird beim Aufruf von MakeObjectInstance automatisch die Funktion FixedMakeObjectInstance aufgerufen. Um dies zu ermöglichen, muss die Unit als aller erste (ShareMem ausgeschlossen) Unit im Projektquellcode eingebunden werden. Da die beiden Funktionen bei Delphi 5 noch in der Forms.pas liegen wird ein Aufruf von MakeObjectInstance, der durch TApplication.Create ausgelöst wird, nicht von FixedMakeObjectInstance abgefangen. Weil aber Application bis zum Programmende besteht, und nur 1x erzeugt wird, ist das nicht weiter schlimm. Zitat:
Der Classes Patch wird so installiert:
Code:
patch Classes.pas Classes.pas.diff
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz