| |

Fortgeschrittene ProgrammierungRe: Anwendung crasht, wenn Klassenvariablen Kopie gelöscht wird | |  | Autor: Mandelkeks | Datum: 31.03.25 09:23 |
| Natürlich habe ich Set probiert, das macht man als erstes. Die Referenzzählung ist hier aber nicht die Lösung, sondern das Problem. Beim Schließen des Klassenmoduls (Set Objektvariable = Nothing) wird Class_Terminate nicht ausgeführt. Nachvollziehbar, weil die Kopie der Objektvariable noch da ist (Referenzzähler > 0). Daran ist der Versuch gescheitert, die Kopie der Objektvariable zu löschen, wenn Class_Terminate ausgeführt wird.
Ja, man kann die Kopie an derselben Stelle löschen, wo auch die Objektvariable gelöscht wird (funktioniert); jedoch, wie ich oben schrieb, hat der Code keinen Zugriff auf die Stelle, wo das Klassenmodul instanziert und später wieder auf Nothing gesetzt wird (das eine ist das Vordergrundprogramm, das die Klasse nutzt, und da andere die Klasse selbst).
Die Kopie der Objektvariable müsste innerhalb der Klasse gelöscht werden, wenn diese geschlossen wird, aber wenn Class_Terminate nicht triggert, habe ich keine Idee mehr, wie das machbar sein soll
Info zu CopyMemory:
Damit wollte ich den Referenzzähler umgehen. Das hat auch funktioniert. Leider kam aber dann das Problem, dass die Kopie der Objektvariable später nicht mehr auf Nothing gesetzt werden kann, ohne dass Access den Abflug macht. Selbst die Änderung der Variable (z.B. einen Verweis auf ein anderes Objekt zu setzen) war nicht möglich, weil dabei zuerst der bestehende, tatsächlich aber nicht mehr valutierende Verweis auf das längst geschlossene Klassenmodul gelöscht wird, was dann crasht. Ich vermute, beim Löschen der Kopie der Objektvariable schreibt Access in einen Speicherbereich, der aber schon wieder freigegeben ist bzw. neu genutzt wird. Auf jeden Fall funktioniert das nicht. Die Kopie der Objektvariable müsse womöglich auf dieselben Speicherstelle zeigen wie die Objektvariable selbst (eine Art by Reference), so dass die Kopie der Objektvariable sogleich leer ist, wenn die Objektvariable auf Nothing gesetzt wird. Ein Klecks in Assembler und C, ich weiß aber nicht, ob das in VBA/API geht und wenn ja, WIE 
Beitrag wurde zuletzt am 31.03.25 um 09:41:47 editiert. |  |
 | 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 |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCommand 4.0 
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|
|
|
Copyright ©2000-2025 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
|
|