Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL läst sich nicht entladen (https://www.delphipraxis.net/47659-dll-laest-sich-nicht-entladen.html)

franktron 14. Jun 2005 15:56


DLL läst sich nicht entladen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe irgendwo ein Fehler gemacht.

Wenn ich dei DLL Laden dann geht alles gut aber sobald ich sie entlade kommt ungüötige Zeigeroperration

was habe ich falsch gemacht

brechi 14. Jun 2005 16:36

Re: DLL läst sich nicht entladen
 
dein mplugin ist falsch
du überschreibst die create und destroy anweisung durch deine eigene funktion

die original create rufste nicht mit inhertited auf, destroy schon und ich denk mal das mag die klasse net so ;)

also einfach beim constructor auch inherited aufrufen

franktron 14. Jun 2005 18:05

Re: DLL läst sich nicht entladen
 
Thx werds gleich morgen mal testen

franktron 15. Jun 2005 09:01

Re: DLL läst sich nicht entladen
 
Das klappt immer noch nicht.
Hat den keiner eine idee

hier nochmal den Code

Das Module
Delphi-Quellcode:
unit MPlugin;

interface

Uses FastShareMem, Forms, DB, Controls;//, mySQLDbTables, uStringArray;

Const
   FVersion     = '1.0';
   
type
   TKomm         = Record
      var1,var2,var3,var4   : Variant;
      von                           : Longint;
   End;

   TSysVars = Record
      //Pfade
      ProgPath               : String;
      TMPPath                  : String;
      WinPath                  : String;

      //SysVars
      Aktrechner            : String;      //Echter Name
      PCName                  : String;      //Int Name

      //PrgVars
      IDatum                  : TDate; {Internes Datum}
      AktJahr                  : Word;
      AktMonat               : Byte;
      AktVer                  : String;
      Firmenname1            : String;
      Firmenname2            : String;
      Firmenstrasse         : String;
      Firmenort               : String;
      AktWaehrung            : String;

      //Usermanagment
      //OptList                  : THashStringArray;
      AktUser                  : Longint;
   End;

   TONLPlugin = Class
   private
      { Private-Deklarationen }
      {FHostApp: TApplication;
      FHostDB: TmySQLDataBase;
    FSysVars: TSysVars;
      FKomm: TKomm; }
      
      {procedure SetSysVars(const Value: TSysVars);
    procedure SetKomm(const Value: TKomm);
    procedure SetHostApp(const Value: TApplication);
      procedure SetHostDB(const Value: TmySQLDataBase); }
   public
      { Public-Deklarationen }

      {Property HostApp : TApplication read FHostApp write SetHostApp;
      Property HostDB : TmySQLDataBase read FHostDB write SetHostDB;
      Property SysVars : TSysVars read FSysVars write SetSysVars;
      Property Komm : TKomm read FKomm write SetKomm;     }
      Constructor Create;
      Destructor Destroy; override;

      Function GetVersion : String;
      //Starts
      Procedure StartDay;
      Procedure StartMonth;
      Procedure StartYear;
      Procedure UPDTabs;
   End;

   TLoadPlugin = Function : TONLPlugin; stdcall;
  TUnloadPlugin = Procedure stdcall;

implementation

{ TONLPlugin }

constructor TONLPlugin.Create;
begin
   inherited;
end;

destructor TONLPlugin.Destroy;
begin
  inherited;
end;

function TONLPlugin.GetVersion : String;
begin
   Result:=FVersion;
end;

{procedure TONLPlugin.SetHostApp(const Value: TApplication);
begin
  FHostApp := Value;
end;

procedure TONLPlugin.SetHostDB(const Value: TmySQLDataBase);
begin
  FHostDB := Value;
end;

procedure TONLPlugin.SetKomm(const Value: TKomm);
begin
  FKomm := Value;
end;

procedure TONLPlugin.SetSysVars(const Value: TSysVars);
begin
  FSysVars := Value;
end;     }

procedure TONLPlugin.StartDay;
begin
   //
end;

procedure TONLPlugin.StartMonth;
begin
   //
end;

procedure TONLPlugin.StartYear;
begin
   //
end;

procedure TONLPlugin.UPDTabs;
begin
   //
end;

end.
Die DLL
Delphi-Quellcode:
library testplugin;

uses
  SysUtils,
  Classes,
   FastShareMem,
   MPlugin in '..\share\MPlugin.pas',
   Forms;

{$R *.res}

Var
   Plugin      : TONLPlugin;
   
Function LoadPlugin : TONLPlugin; stdcall;
Begin
   Plugin:=TONLPlugin.Create;
   Result:=Plugin;
End;

Procedure UnloadPlugin; stdcall;
Begin
   FreeAndNil(Plugin);
End;

Exports
   LoadPlugin,
   UnloadPlugin;
   
begin
end.
Der Loader
Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, MPlugin, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
      Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
      { Private-Deklarationen }
      DLLHandle      : THandle;
      Plugin         : TONLPlugin;
  public
    { Public-Deklarationen }
   end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var
   LoadPlugin : TLoadPlugin;
begin
   DLLHandle:=LoadLibrary('dlls\testplugin.dll');
   If DLLHandle<>32 then
   Begin
      LoadPlugin:=GetProcAddress(DLLHandle,'LoadPlugin');
      Try
         If Assigned(LoadPlugin) then
            Plugin:=LoadPlugin;
      except
         FreeLibrary(DLlHandle);
      End;
   End;
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
   UnloadPlugin   : TUnloadPlugin;
begin
   If DLLHandle<>32 then
   Begin
      UnLoadPlugin:=GetProcAddress(DLLHandle,'UnloadPlugin');
      Try
         If Assigned(UnloadPlugin) then
            UnloadPlugin;
      except
      End;  
      FreeLibrary(DLLHandle);
   End;
end;

end.

Basilikum 15. Jun 2005 09:31

Re: DLL läst sich nicht entladen
 
Auszug aus der Readme:
Zitat:

USAGE

Simply include FastSharemem.pas as the first unit in your
library's USES clause AND your project's
(select
Project-View Source) USES clause. FastSharemem has only
been tested on Windows.
dies ist wichtig, damit sich der Memory-Manager installieren kann, bevor Units wie SysUtils im Initialization-Teil Objekte anlegen (die dann natürlich noch beim "alten" Memory-Manager landen)

franktron 15. Jun 2005 09:54

Re: DLL läst sich nicht entladen
 
Das wahrs ich idiot da hät ich auch selbst drauf kommen können :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz