Einzelnen Beitrag anzeigen

Masterof

Registriert seit: 12. Feb 2004
Ort: Bad Elster
142 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Anwendung stoppt bei DLL aufruf

  Alt 2. Feb 2005, 19:54
Hallo!!

Das mit dem laden habe ich gefunden. Jetzt bekomme ich noch eine Zugriffsverletztung bei der Adresse 00000000
Hier ist der Code.
Delphi-Quellcode:
init main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ComCtrls, StdCtrls, Buttons, reinit;

type
  Tfrmmain = class(TForm)
    Label1: TLabel;
    edzahl1: TEdit;
    edzahl2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    edzahl3: TEdit;
    Label4: TLabel;
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    mDLLcontrol: TMemo;
    Label5: TLabel;
    mloesungen: TMemo;
    Label6: TLabel;
    bitend: TBitBtn;
    btcall: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure btcallClick(Sender: TObject);
    procedure bitendClick(Sender: TObject);
  private
    { Private-Deklarationen }
    //Steuerungsvariable für DLL
    hDLL: THandle;
  public
    { Public-Deklarationen }
  end;
type
 TBerechnung = Function(zahl1, zahl2, zahl3: double): double; stdcall;
var
  frmmain: Tfrmmain;
  pBerechnung : TBerechnung;

implementation

{$R *.dfm}
procedure Tfrmmain.Timer1Timer(Sender: TObject);
begin
 statusbar1.Panels[1].Text:= timetostr(time);
end;

procedure Tfrmmain.btcallClick(Sender: TObject);
var wert1, wert2, wert3: double;
    error1, error2, error3: integer;
begin
 val(edzahl1.Text, wert1, error1);
 val(edzahl2.Text, wert2, error2);
 val(edzahl3.Text, wert3, error3);
 if (error1 = 0) and (error2 = 0) and (error3= 0) then
 begin
  //DLL dynamisch laden
    hDLL:= LoadLibrary ('C:\DLL\Formel.dll');
  if hDLL <> 0 then
   begin
    pBerechnung:= GetProcAddress(hDLL, 'berechnen');
    statusbar1.Panels[0].Text:= 'DLL erfolgreich geladen';
   end
   else
    begin
     Showmessage('Laden der DLL Formel.dll fehlfeschlagen');
     exit;
    end;
    //Funktion aus der DLL aufrufen
   pberechnung(wert1, wert2, wert3);
   statusbar1.Panels [0].Text:= 'Funktion in der DLL erfolgreich ausgeführt';

   //DLL wieder entladen und Ressoucen wieder freigeben
   if hDLL <> 0 then
    begin
     FreeLibrary(hDLL);
     pberechnung := NIL;
     statusbar1.Panels[0].Text := 'Bibiliothek erfolgreich freigegeben';

    end;
   end;
   end;

procedure Tfrmmain.bitendClick(Sender: TObject);
begin
close;
end;

end.
MfG Master
.: Meine Homepage :.
http://www.micha-hertel.de
  Mit Zitat antworten Zitat