| |

Fortgeschrittene ProgrammierungAnwendung crasht, wenn Klassenvariablen Kopie gelöscht wird | |  | Autor: Mandelkeks | Datum: 30.03.25 14:17 |
| Hallo
ich finde zu einem etwas "seltsamen" Problem keine Lösung.
Innerhalb eines Klassenmoduls, auf deren Instanz(Variable) von "außerhalb" kein Zugriff besteht, weil die Klasse in unterschiedlichen Unterformularen instanziert wird, habe ich mit CopyMemory eine Kopie der Instanzvariable erstellt (nur mal interessehalber):
'Öffentliches Modul
'Öffentliche Objektvariable
Public oObject as Object 'Im Klassenmodul
'API
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
Dest As Any, _
Source As Any, _
ByVal Bytes As Long)
'Testprozedur
Public Sub Test
MsgBox "Hallo"
End Sub
'Code in Class_Initialize
Private Sub Class_Initialize()
CopyMemory oObject, ObjPtr(Me), 4 'Kopie der Klassenadresse => oObject
End sub 'So kann ich "von außen" auf die Klasse zugreifen, ohne die Instanzvariable kennne zu müssen. Das funktioniert auch einwandfrei:
Sub Main
oObject.Test 'Funktioniert und ruft die Prozedur 'Test' im Klassenmodul auf
End Sub Jetzt kommt das Problem: Wenn ich die Variable wieder löschen will, crasht Access
set oObject = Nothing Dasselbe passiert, wenn die Variablen in der IDE über den kleinen blauen Button 'Zurücksetzen' gelöscht werden.
Alle Versuche zur Ursachenfindung sind gescheitert, z.B. 'ByVal' bei 'CopyMemory'. Jetzt weit ich nicht mehr weiter, denn grundsätzlich wurde mit 'CopyMemory' eine funktionsfähige Kopie der Klasse erstellt, die auch funktioniert, solange die Klasse geöffnet ist. Doch die Kopie der Variable lässt sich nicht mehr löschen, ohne dass Access crasht. Selbst wenn die Klasse geschlossen ist führt das Löschen der Hilfsvariablen zum Abflug.
Hat jemand eine Idee, was ich übersehen habe? WIESO crasht eine Anwendung, wenn eine Variable, deren Objekt gar nicht mehr existiert, auf 0 gesetzt wird? Fühlt sich so an, als wäre die Klasse noch im Speicher, aber 'Class_Terminate' wurde ausgeführt ... ich habe keine Idee mehr 
Beitrag wurde zuletzt am 30.03.25 um 14:36:54 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 |
  |
|
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 InfosTipp des Monats April 2025 Manfred BohnIndexOf für mehrdimensionale ArraysDie generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere 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
|
|