![]() |
Eigenes Package - Ungültige Zeigeroperation
Hallo!
Ich schaffe es einfach nicht, folgenden Fehler abzustellen: Aus meinem Hauptprogramm heraus lade ich dynamisch ein Package. Diesem Package übergebe ich ein Objekt, welches ein bestimmtes Interfaces implementiert (als Schnittstelle zwischen Programm und Package). Das Package speichert sich das Objekt ab und ruft zu einem späteren Zeitpunkt aus diesem Interface eine Methode auf:
Delphi-Quellcode:
Nun tritt folgendes auf: Die Methode wird aufgerufen, in den except Bereich wird nicht gesprungen, wie ich im Debug-Modus sehe. Aber beim Ausstieg aus dieser Prozedur kommt der Fehler.
procedure TfrmExcelImport.SpeicherImportierteKunden;
begin try FKundendaten.GetNaechsteFreieKundenNr; // FKundenten enthält das Objekt, welches das Interface implementiert except on E: Exception do ShowMessage('Die Kunden konnten nicht importiert werden: '+ E.Message); end; end; // <--- drücke ich hier F7, kommt eine Invalid Pointer Exception Ich hoffe, ihr könnt mir etwas weiterhelfen. Das würde mich wirklich freuen! angelika |
Re: Eigenes Package - Ungültige Zeigeroperation
Zeig mal auch die Erzeugung des Objekts und den Aufruf der Methode
|
Re: Eigenes Package - Ungültige Zeigeroperation
Hallo,
Die Methode, welche im Hauptprogramm liegt, habe ich zur Fehlereingrenzung gekürzt und gebe dort einfach nur 5 zurück:
Delphi-Quellcode:
FKundendaten wird in einer Singleton-Klasse gespeichert. Was ich gemerkt habe, ist folgendes:
function TKundeDB.GetNaechsteFreieKundenNr: integer;
begin result := 5; end; Im Package zeige ich nun sofort den Ergebniswert an, den ich aus der Methode "GetNaechsteFreieKundenNr" aus dem Hauptprogramm bekomme, an:
Delphi-Quellcode:
Dann wird die 5 ausgegeben, anschließend kommt aber eine "Access Violation in module rtl100.bpl". Das muss doch allgemein etwas mit der Speicherverwaltung zu tun haben, oder sehe ich das falsch? Denn vom Package auf das Programm per Interface funktioniert ja, wie ShowMessage zeigt.
ShowMessage(FKundendaten.GetNaechsteFreieKundenNr);
|
Re: Eigenes Package - Ungültige Zeigeroperation
Wie lädst du das Package?
|
Re: Eigenes Package - Ungültige Zeigeroperation
:)
So, hier lade ich das Package:
Delphi-Quellcode:
try
pModule := LoadPackage(files.Strings[i]); @proc := GetProcAddress(pModule, 'Plugin'); if not Assigned(proc) then raise EPackageException.Erzeugen('Fehler beim Laden'); plugin := proc(files.Strings[i], FKundendaten); // <-- Hier übergebe ich einen String und das Objekt, welches das Interface implementiert FPluginListe.Add(plugin); except on E: Exception do begin UnloadPackage(pModule); raise E; end; end; |
Re: Eigenes Package - Ungültige Zeigeroperation
Zitat:
|
Re: Eigenes Package - Ungültige Zeigeroperation
Hallo!
Danke für die Tipps! Genau daran lag es! :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15: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