Einzelnen Beitrag anzeigen

Masterof

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

Re: Anwendung stoppt bei DLL aufruf

  Alt 2. Feb 2005, 15:48
Nein, leider kommt keine Fehlermeldung.

Das ist eigentlich der relevate Code, da weiter unten die Funktion nur noch aufgerufen wird. Bis da hin komme ich leider nicht.
Wen ich mit Strg + F9 compiliere, dann macht er es auch villständig, ausführen lässt es sich dann wiederum nicht.

Hier ist der vollständige code.

Delphi-Quellcode:
unit main;

interface

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

type
  Tfrmmain = class(TForm)
    Label1: TLabel;
    edtext: TEdit;
    edtextafter: TEdit;
    btdll: TButton;
    btend: TButton;
    auswertungsm: TMemo;
    Label2: TLabel;
    Label3: TLabel;
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    procedure btendClick(Sender: TObject);
    procedure btdllClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    //DLL nach gebrach aus Speicher entfernen
    hDLL : THandle;
  public
    { Public-Deklarationen }
  end;
type
  //Prozedurtypen
  TFmtStringUpCase = function(Text: PChar):PChar;
var
  frmmain: Tfrmmain;
  //Prozedurvariable
  pFmtStringUpCase : TfmtStringUpcase;
implementation

{$R *.dfm}
//Aufruf der Funktion in der DLL
function FmtStringUpCase(text:PChar): PChar; external 'g:\FmtStr32.dll';

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

procedure Tfrmmain.btdllClick(Sender: TObject);
begin
//Protokollanzeige löschen
  auswertungsm.Lines.Clear;

  //DLL dynamisch laden
  hDLL:= LoadLibrary ('C:\WINDOWS\system32\FmtStr32.dll');
  if hDLL <> 0 then
   begin
    pFmtStringUpcase:= GetProcAddress(hDLL, 'FmtStringUpcase');
    auswertungsm.Lines.add('DLL erfolgreich geladen');
   end
   else
    begin
     Showmessage('Laden der DLL FmtStr32.dll fehlfeschlagen');
     exit;
    end;
    //Funktion aus der DLL aufrufen
   edtextafter.Text:= FmtStringUpCase(Pchar(edtext.Text));
   auswertungsm.Lines.add('Funktion in der DLL erfolgreich ausgeführt');

   //DLL wieder entladen und Ressoucen wieder freigeben
   if hDLL <> 0 then
    begin
     FreeLibrary(hDLL);
     pFmtStringUpCase := NIL;
     auswertungsm.Lines.add('Bibiliothek erfolgreich freigegeben');
    end;
end;

procedure Tfrmmain.FormCreate(Sender: TObject);
begin
 statusbar1.Panels[0].Text:= 'Michael Hertel © 2004';
end;

procedure Tfrmmain.Timer1Timer(Sender: TObject);
begin
 statusbar1.Panels[1].Text:= Timetostr(time);
end;

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