AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein DLL Einbindung - Fehler beim Beenden
Thema durchsuchen
Ansicht
Themen-Optionen

DLL Einbindung - Fehler beim Beenden

Ein Thema von fsc · begonnen am 1. Aug 2006 · letzter Beitrag vom 15. Sep 2006
Antwort Antwort
Seite 1 von 3  1 23      
fsc

Registriert seit: 12. Sep 2005
22 Beiträge
 
#1

DLL Einbindung - Fehler beim Beenden

  Alt 1. Aug 2006, 13:49
Moin!

Ich habe ein nettes kleines Tool geschrieben, womit man Einträge einer Tabelle ändern kann. --> Das funktioniert soweit.
Jetzt gibt es noch ein paar weitere Programme die ähnliche Aufgaben erfüllen. Der Sicherheit halber habe ich jede Tabelle mit den gleichen Feldern erweitert und frage diese dann per DLL ab und zeige sie an. Funktioniert bis dahin auch ganz wunderbar...

Wenn ich dann jedoch das Programm letztendlich beende (mit einem simplen "close"), kommt folgende Fehlermeldung: "Die Anweisung in xyz verweist auf Speicher in 123. Der Vorgang "read" konnte nicht auf dem Speicher ausgeführt werden." Danach kommt dann noch, "Runtime error 216 at xyz". Gestern habe ich das Internet bereits durchforstet nach Lösungen.

Meine CPU ist nicht zu schnell und ich habe auch keinen SubSeven auf dem Rechner. Hat jemand eine weitere Idee?

Sobald ich die Dll aus meinem Programm wieder entferne, geht alles wie vorher. Meine Frage lautet also: Was passiert eigentlich im Hintergrund wenn eine DLL aufgerufen wird? Innerhalb der DLL gebe ich alles was ich erzeugt habe auch wieder frei.

Vielen Dank im vorraus!

fsc
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: DLL Einbindung - Fehler beim Beenden

  Alt 1. Aug 2006, 13:52
Lädst du die DLL dynamisch?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
fsc

Registriert seit: 12. Sep 2005
22 Beiträge
 
#3

Re: DLL Einbindung - Fehler beim Beenden

  Alt 1. Aug 2006, 14:55
nein sie ist statisch eingebunden. Es wird auch nur eine procedure aufgerufen, welche einer Datenbank Werte bzw Felder entnimmt und diese in ein StringGrid füllt.. dann modal anzeigt das wars
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: DLL Einbindung - Fehler beim Beenden

  Alt 1. Aug 2006, 15:43
Ist die DLL in Delphi geschrieben? Wurde ShareMem in DLL und Hauptprogramm verwendet?
Poste mal die Deklaratino der aufgerufenen Funktion.
  Mit Zitat antworten Zitat
fsc

Registriert seit: 12. Sep 2005
22 Beiträge
 
#5

Re: DLL Einbindung - Fehler beim Beenden

  Alt 1. Aug 2006, 16:31
die DLL habe ich mit Delhpi gemacht. ShareMem habe ich nicht verwendet.
Was macht ShareMem? :?:

Dekalration unter Implemtation steht:
...
procedure benutzer(Provider,feld,eintrag,einrag_detail:strin g)stdcall; external 'Aenderungsinfo.dll';
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: DLL Einbindung - Fehler beim Beenden

  Alt 2. Aug 2006, 06:10
Klassischer Fehler.
Sowohl in Hauptprogramm als auch DLL muss ShareMem eingebunden werden.
DLL und Hauptprogramm haben sonst separate Memorymanager.
Uebergibt und manipuliert man nun Strings oder Objekte (alles was dynamisch alloziiert ist), so wird Memory im einen Manager alloziiert und im anderen freigegeben.
Das Resultat ist dann schnell ein korrumpierter Memorymanager und irgendwann (oft beim Programmende) gibt es einen Absturz.
ShareMem verbindet beide Memorymanager so das es dann wieder einer ist.

Erzeuge mal ein leeres DLL-Projekt mit Delphi und lies dir durch was im Kommentar des erzeugten Files steht.
  Mit Zitat antworten Zitat
fsc

Registriert seit: 12. Sep 2005
22 Beiträge
 
#7

Re: DLL Einbindung - Fehler beim Beenden

  Alt 2. Aug 2006, 10:09
Danke erstmal!

Also ShareMem habe ich eingebunden..., einfach nur in die uses Liste, nicht wahr?

Jetzt erscheint beim schließen des aus der DLL heraus erzeugten Fensters eine Exception und beim Beenden einer dieser Windows Fehler: "Programm.exe hat einen Fehler verursacht" usw. Danach der Runtime error 217. Mit dem Datentyp ShortString und Pchar passiert das gleiche...

EDIT: Muss die DLL wirklich als erste Unit eingebunden werden oder ist das quatsch?!
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.890 Beiträge
 
Delphi 12 Athens
 
#8

Re: DLL Einbindung - Fehler beim Beenden

  Alt 2. Aug 2006, 10:30
jawoll, die muss unbedingt als erste eingebunden werden.

Gruß

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat
fsc

Registriert seit: 12. Sep 2005
22 Beiträge
 
#9

Re: DLL Einbindung - Fehler beim Beenden

  Alt 2. Aug 2006, 10:46
das für zu einer Endlosschleife Exceptions nach beenden. erst 217 dann immer wieder 216.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.890 Beiträge
 
Delphi 12 Athens
 
#10

Re: DLL Einbindung - Fehler beim Beenden

  Alt 2. Aug 2006, 10:58
poste doch mal Deinen Code, vielleicht können wir Dir dann helfen.

Definitiv muß sharemem sowohl im aufrufenden Projekt (nicht in dessen Mainform oder sonstwo) als auch in der DLL als erstes in die USES-Klausel aufgenommen werden.

Gruß

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:51 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