Entwickler-Ecke

Dateizugriff - DLL Fehler: EAccessViolation


juenta - Mi 24.05.06 17:28
Titel: DLL Fehler: EAccessViolation
Moin,
ich habe ein Problem mit einer dll, die ich von Externen bekommen habe und als Blackbox benutzen darf.
Die dll wird aufgerufen, liest eine ini-Datei erfolgreich (da in der dll eine Log Prozedur implementiert ist und alles erfolgreich gespeichert wird). Noch bevor mein Delphi Programm aber weiter läuft, erscheint folgende Fehlermeldunng:
Expetion der Klasse EAccessViolation 'Zugriffsverletzung bei Adresse 1001BF7B in Modul ...dll' Lesen von Adresse 00000000

Wer kann mir sagen, was ich machen muss?
Bin für jede Hilfe dankbar
Juenta


Delete - Mi 24.05.06 17:31

Ohne weitere Informationen (Sourcecode, was du schon probiert hast) dürfte jede weiter Hilfe in einem Ratespiel enden.


juenta - Mo 29.05.06 09:37

Den Sourcecode der DLL kenne ich leider auch nicht.
Den Aufruf der DLL habe ich unten rein kopiert:

Probiert habe ich verschiedene ini-files. Diese funktionieren auch im einfachsten Fall. In erweiterten Anwendungsfall werden die Steuerungsaufgaben erweitert und die DLL liest aus der DLL einige events und actions. Diese werden scheinbar auch von der DLL gelsen, da in modifzierter Form direkt von der DLL geloggt, aber dann kommt die oben beschriebene Fehlermeldung.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
  (* externall DLL controller *)
  (* link DLL libary *)
  with BinContVar do begin
    if DLLlog=1 then begin
      assignfile(CLOG,'externeDLL.log');
      rewrite(CLOG);
    end;
(*    ShowMessage('Regler-DLL laden');
    if Assigned(externeDLL) then ShowMessage('vor Laden: externeDLL ist zugewiesen')
    else ShowMessage('vor Laden: externeDLL ist nicht zugewiesen');
    DllHandle:=0; *)

    if not assigned(externeDLL) then try
     DllHandle:=LoadLibrary(pchar(BinContVar.dllname));
    except
     on E: Exception do begin
      MessageDlg('Fehler beim Laden der Dll:'+#13+E.Message, mtError, [mbOk], 0);
      exit;
     end;
    end;
    if DLLlog=1 then writeln(CLOG,'Loaded library ',BinContVar.dllname,' sucesfully!');
    try
     @externeDLL:=GetProcAddress(DllHandle, 'externeDLL');
    except
     on E: Exception do begin
      MessageDlg('Fehler beim Import von externeDLL aus der Dll:'+#13+E.Message, mtError, [mbOk], 0);
      exit;
     end else
      MessageDlg('Nicht abgefangener Fehler beim Funktionsimport aus Regler-DLL',mtError,[mbOk],0);
    end;
    if @externeDLL<>nil then begin
      if DLLlog=1 then writeln(CLOG,'Imported function externeDLL from ',BinContVar.dllname,' sucesfully!');
    end else begin
      if DLLlog=1 then writeln(CLOG,'ERROR -- function externeDLL could not be loaded from ',BinContVar.dllname,'!');
      ShowMessage('Funktion externeDLL in '+BinContVar.dllname+' nicht vorhanden.');
      if DLLlog=1 then closefile(CLOG);
      halt;
    end;
    BinContVar.flag := 0;

      (* do initialisation in DLL *)
      writeavrSwap(avrSwap);

      if BinContVar.DLLlog=1 then begin
        writeln(BinContVar.CLOG,'variable values before call of externeDLL!');
        externeDLLLog;  // logging
      end;
      sleep(1);     // magical sleep
      try
        BinContVar.externeDLL(avrSwap,aviFail,accINFILE,avcOUTNAME,avcMSG);
      except
        on E: Exception do begin
          MessageDlg('Error calling procedure externeDLL from Dll:'+#13+E.Message, mtError, [mbOk], 0);
      end;
      BinContVar.flag := 1;              // flag = 0 for the first call, 1 there after!
      if BinContVar.DLLlog=1 then begin
        writeln(BinContVar.CLOG,'variable values after call of externeDLL!');
        externeDLLLog;  // logging
      end;


Moderiert von user profile iconjasocul: Delphi-Tags hinzugefügt