AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Warum stützt mein Programm mit dynamischer DLL ab?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum stützt mein Programm mit dynamischer DLL ab?

Ein Thema von Aurus · begonnen am 19. Mai 2006 · letzter Beitrag vom 20. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
Aurus

Registriert seit: 26. Aug 2005
Ort: Schweiz
53 Beiträge
 
#1

Warum stützt mein Programm mit dynamischer DLL ab?

  Alt 19. Mai 2006, 08:01
Hallo

Ich will in meinem Programm eine DLL dynamisch laden. Das funktioniert alles. Doch wenn ich das Programm beenden kommt dann immer die Fehlermeldung: "Anwendungsfehler! Zugriffsverletzung an Adressee bla bla...."

Ich habe versucht im OnClose mit :

if Hauptansicht.CSDLLHandle <> 0 then FreeLibrary(Hauptansicht.CSDLLHandle);

den Handle zu beenden. Aber ob mit oder ohne dieses Zeile verbessert sich nichts.


Wo könnte der Fehler liegen?

Die DLL habe ich selber geschrieben. Die Funktionen der DLL "funktionieren"

Wenn ich versuche ein 2x die gleiche DLL zu öffnen gibt es auch eine Fehlermeldung. Eigentlich müsste der Handele ja freigegeben und neu geöffnet werden ?

Hier ein kleiner Auschnitt beim laden der DLL:
Delphi-Quellcode:
if OpenDialog1.Execute then
  begin

    if Hauptansicht.CSDLLHandle <> 0 then FreeLibrary(Hauptansicht.CSDLLHandle);

    Hauptansicht.PfadChecks:=OpenDialog1.FileName;
    Hauptansicht.CSDLLHandle := LoadLibrary(PChar(Hauptansicht.PfadChecks));

    if Hauptansicht.CSDLLHandle <> 0 then
    begin
      FuncPtr := GetProcAddress(Hauptansicht.CSDLLHandle,'DLLCSCheck');
      FuncPtr := GetProcAddress(Hauptansicht.CSDLLHandle,'Abgleich');
      if FuncPtr = nil then
      begin
        showMessage('Die DLL enthält keinen Abgleich!');
      end;

      if FuncPtr <> nil then
      begin
        @Berechnung := FuncPtr;
   
      end;
[edit=sakura] [delphi]-Tags, Leeeerzeilen entfernt. Mfg, sakura[/edit]
[edit=sakura] Personality auf Delphi Win32 gesetzt. Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Warum stützt mein Programm mit dynamischer DLL ab?

  Alt 19. Mai 2006, 08:21
Hallo.

Kann es sein, dass du Zeiger auf Funktionen deiner Library z.B. in irgendeinem event handler benutzt, nachdem du die Library bereits entladen hast?

Grüße vom marabu
  Mit Zitat antworten Zitat
Aurus

Registriert seit: 26. Aug 2005
Ort: Schweiz
53 Beiträge
 
#3

Re: Warum stützt mein Programm mit dynamischer DLL ab?

  Alt 19. Mai 2006, 08:46
Hallo marabu


Sorry aber so gut bin nicht und verstehe deine Aussage deshalb nicht.

Wie meinst du das genau?
Delphi-Quellcode:
Hier ein ausschnitt aus der DLL:

  uses
  SysUtils,
  Classes,
  DLLLizCheck in 'DLLLizCheck.pas';


function Abgleich(DD:PChar; DatGr: Longint):PCHar; export
var
  intAdr :Longint;
begin
  if ((DatGr <=32768) AND (DatGr >0)) then
  begin
    intAdr :=$0010;
    DD[intAdr]:= Char(intB1);
    result:=DD;
  end;
end;

function Inhalt(A:Integer):String;export
begin
  if A=2 then Result:='E0000000';
end;

Function DLLCSCheck(A:PCHar):PChar;export
begin
  Result :=CheckCSDLL(A);
end;

exports
  Abgleich,
  Inhalt,
  DLLCSCheck;

begin
end.
Gruss

Aurus

[edit=sakura] [delphi]-Tags, Leeeeeerzeilen im Code entfernt. Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Warum stützt mein Programm mit dynamischer DLL ab?

  Alt 19. Mai 2006, 09:07
Hallo Aurus,

in deinem ersten Code-Beispiel hast du dir eine Funktionsadresse in die Variable FuncPtr geholt und reichst die Adresse sogar noch weiter. Stellst du sicher, dass nach dem Entladen der Library keine dieser Zeigervariablen weiter verwendet wird? Es würde unweigerlich zu einer Zugriffsverletzung kommen.

Übrigens kannst und solltest du deine Code-Beispiele im Beitragseditor als Delphi-Code kennzeichnen (der große Button in der Werkzeugleiste).

Grüße

marabu
  Mit Zitat antworten Zitat
Aurus

Registriert seit: 26. Aug 2005
Ort: Schweiz
53 Beiträge
 
#5

Re: Warum stützt mein Programm mit dynamischer DLL ab?

  Alt 19. Mai 2006, 09:18
Meinst du die Variable "FuncPtr" ?


PS

Ich kann nicht auf den Quellcode-Button klicken. Vermutlich weil ich Javascript oder sonst was deaktiviert habe.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Warum stützt mein Programm mit dynamischer DLL ab?

  Alt 19. Mai 2006, 09:32
Zitat von Aurus:
Ich kann nicht auf den Quellcode-Button klicken. Vermutlich weil ich Javascript oder sonst was deaktiviert habe.
Dann schreib einfach [.delphi] [/delphi] (ohne den Punkt bei delphi) um deinen Quellcode. Er wird dann wesentlich einfacher Lesbar.

Und ja er meint FuncPtr. Die Funktion darf nicht mehr benutzt werden, nach dem die Bibliothek mit FreeLibrary freigegeben wurde.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Aurus

Registriert seit: 26. Aug 2005
Ort: Schweiz
53 Beiträge
 
#7

Re: Warum stützt mein Programm mit dynamischer DLL ab?

  Alt 19. Mai 2006, 09:50
Sobald ich den Handle mit FreeLibrary freigegeben habe benutze ich keine Funktionen mehr aus der DLL.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Warum stützt mein Programm mit dynamischer DLL ab?

  Alt 19. Mai 2006, 10:02
Ich denke doch. Stelle sicher, dass die dynamisch ermittelten Funktionsadressen allesamt in globalen Variablen gehalten werden, setze die Zeiger beim Entladen der Bibliothek alle auf nil und prüfe vor jeder Verwendung der Zeiger auf Assigned(FuncPtr).

marabu
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Warum stützt mein Programm mit dynamischer DLL ab?

  Alt 19. Mai 2006, 10:33
@Aurus: Nutze in Zukunft bitte die [delphi]-Tags zur Darstellung von Code. Die obigen Beiträge habe ich entsprechend angepasst.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
19. Mai 2006, 10:33
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Programmieren allgemein ist für Fragen die nicht zu Delphi, C++, C# sind
Antwort Antwort
Seite 1 von 2  1 2      


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 06:18 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