![]() |
Re: Wie Panel in dll ablegen und bei bedarf laden
Zitat:
Du musst noch eine unload Prozedur mit ins Package übernehmen:
Code:
und diese im FormClose Event aufrufen, dann kommen auch keine Fehler mehr beim Programmende:
procedure UnloadMe;
begin fmTest.free end;
Code:
Alternativ würde es sich anbieten, einen Verweis auf das Formular im Package der Hauptanwendung zu übergeben (Das geht mit Packages im Gegensatz zu DLLs), dann kannst du ja auch so free aufrufen.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var UnloadProc: procedure; begin @UnloadProc:=GetProcAddress(phm, 'UnloadMe'); if Assigned(UnloadProc) then UnloadProc; Zitat:
Mit der Taskleiste, das kann ich nicht reproduzieren. Bei mir erscheint weder in der Taskleiste noch in der Prozessübersicht ein Eintrag vom geladenen Modul (Wie es auch sein sollte). Schick mir doch mal bitte deinen Code. |
Re: Wie Panel in dll ablegen und bei bedarf laden
Liste der Anhänge anzeigen (Anzahl: 1)
Ja das mit einem Dynamischen Array hatte ich mir auch schon überlegt, ich dachte nur das es vielleicht eine bessere möglichkeit geben könnte.
Den Quellcode füge ich hier als anhang an. Danke für eure Hilfe. |
Re: Wie Panel in dll ablegen und bei bedarf laden
Und noch ne Frage wie kann ich dann aus dem Plugin heraus eine Procedure/Function aufrufen die in der Hauptanwendung deklariert ist? Geht das überhaupt?
|
Re: Wie Panel in dll ablegen und bei bedarf laden
Keiner Ne Idee????
|
Re: Wie Panel in dll ablegen und bei bedarf laden
So habe jetzt ein Dyn. Array für die Hadles für die Plugins eingebaut und schon bekomme ich kurz nach dem das Plugin geladen wird und ich die hauptanwendung anklicke eine Zugrifsverletzung?
hier Mein Quellcode:
Code:
Hat jemand ne Idee woran das liegen könnte?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus, ElImgFrm; type TForm1 = class(TForm) PopupMenu1: TPopupMenu; popupmenuClose: TMenuItem; N1: TMenuItem; popupmenuLoadPlugin: TMenuItem; opendlgPlugin: TOpenDialog; ElImageForm1: TElImageForm; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure popupmenuCloseClick(Sender: TObject); procedure popupmenuLoadPluginClick(Sender: TObject); procedure FormCreate(Sender: TObject); private procedure LoadPlugin(PluginPath: String); { Private-Deklarationen } public { Public-Deklarationen } end; type TPluginModule = Record Name: String; pih: HModule; end; var Form1: TForm1; Plugins: Array of TPluginModule; implementation {$R *.dfm} procedure TForm1.LoadPlugin(PluginPath: String); var phm: HModule; LoadP: procedure (Handle: hwnd; var fHeight: integer); NewScrollBox: TScrollBox; fHeight: integer; begin phm:=LoadPackage(PluginPath); If phm <> 0 Then try @LoadP:=GetProcAddress(phm, 'LoadMe'); If Assigned(LoadP) Then begin NewScrollBox:=TScrollBox.Create(Form1); NewScrollBox.parent:=self; NewScrollBox.Align:=alTop; NewScrollBox.Height:=100; LoadP(NewScrollBox.Handle, fHeight); NewScrollBox.Height := fHeight; SetLength(Plugins, Length(Plugins) + 1); Plugins[Length(Plugins)].Name:=''; Plugins[Length(Plugins)].pih:=phm; end else begin ShowMessage ('"LoadMe"-Prozedur nicht gefunden'); end finally // UnloadPackage(phm); end else ShowMessage ('Plugin nicht gefunden'); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var UnloadProc: procedure; I: Integer; begin If Length(Plugins) > 0 Then begin For I:=0 To Length(Plugins) Do begin If Plugins[I].pih <> 0 Then begin @UnloadProc:=GetProcAddress(Plugins[I].pih, 'GetMeFree'); If Assigned(UnloadProc) Then UnloadProc; end; end; end; end; procedure TForm1.popupmenuCloseClick(Sender: TObject); begin Close; end; procedure TForm1.popupmenuLoadPluginClick(Sender: TObject); begin If opendlgPlugin.Execute Then begin LoadPlugin(opendlgPlugin.FileName); end; end; procedure TForm1.FormCreate(Sender: TObject); begin SetLength(Plugins, 0); end; end. |
Re: Wie Panel in dll ablegen und bei bedarf laden
Hat denn keiner ne Idee?
Bitte helft mir! |
Re: Wie Panel in dll ablegen und bei bedarf laden
was sagt denn dein Debugger dazu?
Greetz Boombuler (Ich hab das ganze mal mit ner DLL probiert ich bekomm immer beim CreateParented n fehler! -> Zugriffsverletzung) |
Re: Wie Panel in dll ablegen und bei bedarf laden
Mein Debugger sagt garnichts das ist das Problem es kommt einfach ne MessegeBox wo steht Shutzverletzung blabla bla und ein Fenster in dem Assembler Befehle Stehen das wars.
|
Re: Wie Panel in dll ablegen und bei bedarf laden
Bei welchem Befehl denn? (das wird dein Debugger ja wohl sagen^^)
Greetz Boombuler |
Re: Wie Panel in dll ablegen und bei bedarf laden
Das ist es ja das es bei keinem Befehl ist. der Debuger zeigt nichts an, garnichts!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 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