AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi DLL verursacht Zugriffsverletzung in MDI-Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

DLL verursacht Zugriffsverletzung in MDI-Anwendung

Ein Thema von NetSonic · begonnen am 7. Jun 2007 · letzter Beitrag vom 11. Jun 2007
 
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#1

DLL verursacht Zugriffsverletzung in MDI-Anwendung

  Alt 7. Jun 2007, 12:52
Ich habe folgendes Problem:

Ich binde eine DLL mit Windows API-Funktionen in eine Anwendung, die nur aus einem Hauptformular besteht wie folgt ein:

Delphi-Quellcode:
implementation

{$R *.DFM}

//Ansterungsfunktionen aus DLL
function StartWatchdog(Timeout: PChar): Boolean; stdcall; external 'wdt_io_dll.dll';
function StopWatchdog(): Boolean; stdcall; external 'wdt_io_dll.dll';
function RestartWatchdog(): Boolean; stdcall; external 'wdt_io_dll.dll';
function IO_Write(Value: PChar): Boolean; stdcall; external 'wdt_io_dll.dll';
function IO_Read(): PChar; stdcall; external 'wdt_io_dll.dll';

Der Aufruf erfolg z.B. mit dieser Funktion:

Delphi-Quellcode:
procedure TfrmMain.btnWriteClick(Sender: TObject);
begin
     if (IO_Write(PChar(txtOutput.Text)) = false) then
     begin
          MessageDlg('Fehler, kein (gültiges) Handle!', mtWarning, [mbOK], 0);
     end;
end;
Das klappt auch wunderbar. Nun habe ich noch eine Anwendung, die als MDI-Applikation erstellt wurde. Von einem dieser Child-Fenster, die im laufenden Betrieb erzeugt werden, möchte ich nun auch diese Funktionen aus der DLL nutzen. Das ganze habe ich wie folgt in das MDI-Child eingebunden:

Delphi-Quellcode:
implementation

uses frmMainUnit;

{$R *.DFM}

//Ansterungsfunktionen aus DLL importieren
function StartWatchdog(Timeout: PChar): Boolean; stdcall; external 'dll\wdt_io_dll.dll';
function StopWatchdog(): Boolean; stdcall; external 'dll\wdt_io_dll.dll';
function RestartWatchdog(): Boolean; stdcall; external 'dll\wdt_io_dll.dll';
function IO_Write(Value: PChar): Boolean; stdcall; external 'dll\wdt_io_dll.dll';
function IO_Read(): PChar; stdcall; external 'dll\wdt_io_dll.dll';
(Die DLL liegt im Unterordner "dll" im Programmverzeichnis, Pfadänderungen beheben das Problem auch nicht!)
und rufe es so auf...

Delphi-Quellcode:
procedure TfrmRun.btnEinzelbetriebClick(Sender: TObject);
begin
     //Spannung einschalten
     if (IO_Write(PChar('2')) = true) then
     begin
          imgSpannung.Picture.LoadFromFile(ExtractFileDir(Application.ExeName) + '\sys\led_green.jpg');
     end
     else begin
          imgSpannung.Picture.LoadFromFile(ExtractFileDir(Application.ExeName) + '\sys\led_red.jpg');
          StatusLogWrite('Keine Spannung auf dem Kreis!', 'Info');
     end;
     Application.ProcessMessages;
     //Signal einschalten
     if (IO_Write(PChar('4')) = true) then
     begin
          imgSignal.Picture.LoadFromFile(ExtractFileDir(Application.ExeName) + '\sys\led_green.jpg');
     end
     else begin
          imgSignal.Picture.LoadFromFile(ExtractFileDir(Application.ExeName) + '\sys\led_red.jpg');
          StatusLogWrite('Kein Signal auf dem Kreis!', 'Info');
     end;
end;
Jedoch bekomme ich immer eine Zugriffsverletzung und die "IO_Writes" werden nicht ausgeführt, obwohl die Anwendung sonst gut läuft und ich die Einbindung von der oberen Anwendung übernommen habe. Liegt das evtl. daran, dass ich MDI-Childs nutze? Gibt es da besonderheiten beim Einbinden von DLL's?

Gruß, NetSonic
  Mit Zitat antworten Zitat
 


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 21:45 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