AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Eigenes Package - Ungültige Zeigeroperation
Thema durchsuchen
Ansicht
Themen-Optionen

Eigenes Package - Ungültige Zeigeroperation

Ein Thema von angelika81 · begonnen am 13. Apr 2008 · letzter Beitrag vom 14. Apr 2008
Antwort Antwort
angelika81

Registriert seit: 8. Apr 2008
12 Beiträge
 
Delphi 2007 Professional
 
#1

Eigenes Package - Ungültige Zeigeroperation

  Alt 13. Apr 2008, 14:58
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:
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
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.
Ich hoffe, ihr könnt mir etwas weiterhelfen. Das würde mich wirklich freuen!

angelika
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Eigenes Package - Ungültige Zeigeroperation

  Alt 13. Apr 2008, 15:02
Zeig mal auch die Erzeugung des Objekts und den Aufruf der Methode
Markus Kinzler
  Mit Zitat antworten Zitat
angelika81

Registriert seit: 8. Apr 2008
12 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Eigenes Package - Ungültige Zeigeroperation

  Alt 13. Apr 2008, 15:15
Hallo,

Die Methode, welche im Hauptprogramm liegt, habe ich zur Fehlereingrenzung gekürzt und gebe dort einfach nur 5 zurück:
Delphi-Quellcode:
function TKundeDB.GetNaechsteFreieKundenNr: integer;
begin
  result := 5;
end;
FKundendaten wird in einer Singleton-Klasse gespeichert. Was ich gemerkt habe, ist folgendes:
Im Package zeige ich nun sofort den Ergebniswert an, den ich aus der Methode "GetNaechsteFreieKundenNr" aus dem Hauptprogramm bekomme, an:
ShowMessage(FKundendaten.GetNaechsteFreieKundenNr); 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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Eigenes Package - Ungültige Zeigeroperation

  Alt 13. Apr 2008, 15:22
Wie lädst du das Package?
Markus Kinzler
  Mit Zitat antworten Zitat
angelika81

Registriert seit: 8. Apr 2008
12 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Eigenes Package - Ungültige Zeigeroperation

  Alt 13. Apr 2008, 15:33


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;
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Eigenes Package - Ungültige Zeigeroperation

  Alt 13. Apr 2008, 15:46
Zitat von angelika81:
Delphi-Quellcode:
    except on E: Exception do
    begin
        UnloadPackage(pModule);
        raise E;
    end;
    end;
Das "raise E;" sollte besser ein "raise;" sein. Denn "raise;" wird vom Compiler in "Reraise" umgewandelt, wohingegen ein "raise E" einfach das bereits erzeugte Exception Objekt noch mal wirft. Diese wird nur dummerweise wegen dem fehlenden "Reraise" beim "end" des "except" Blocks freigegeben und du bekommst eine EAccessViolation um die Ohren geschlagen.
  Mit Zitat antworten Zitat
angelika81

Registriert seit: 8. Apr 2008
12 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Eigenes Package - Ungültige Zeigeroperation

  Alt 14. Apr 2008, 12:49
Hallo!
Danke für die Tipps! Genau daran lag es!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz