AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mainform aus DLL laden?

Ein Thema von Hyperspacer · begonnen am 27. Dez 2008 · letzter Beitrag vom 15. Jan 2009
 
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#1

Mainform aus DLL laden?

  Alt 27. Dez 2008, 00:08
Hallo,
Ich hoffe ich habe hier das richtige Forum erwischt, denn das Thema ist ziemliches Neuland für mich.

Also erstmal die Dinge die schon funktionieren(nur Hintergrundinfo):
Ich habe eine Anwendung, die ich über das Kontextmenü im Windows Explorer bei bestimmten Dateien(MP3s) starten kann. Wenn ich also viele Dateien markiere wird das Programm auch mehrfach gestartet. Ich habe mit der ONEinst Unit von Luckie dafür gesorgt, dass mein Programm nur einmal gestartet wird und dass alle markierten Dateien an diese eine instanz übergeben werden. Soweit so gut. Das Problem ist jetzt, dass das gegebene Programm inzwischen relativ groß geworden ist und lange zum laden braucht. Erst recht wenn eben 100 Dateien markiert wurden und das Programm 100mal gestartet wird.

Daher möchte ich mein ganzen Grundgerüst umwerfen und das Programm in DLLs verteilen, die immer nur dann geladen werden, wenn sie auch gebraucht werden. Auch die MainForm.
Ich hab inzwischen ein wenig über DLLs gelesen und weiß wie ich sie erstelle und wie ich "von außen" darauf zugreifen.

Wie schaffe ich es, dass ich die mainform als benutzer "normal" nutzen kann? Im Moment wird sie ja erzeugt und dan gleich wieder geschlossen...
Bisher hab ich folgendes:

Programm:
Delphi-Quellcode:
program bla;

uses
  windows, SysUtils;

type
  TStarteMainForm = procedure; stdcall;
  procedure StartMainForm;

Var
  DLL : THandle;

{$R *.res}

procedure StartMainForm;
Var
  StarteForm : TStarteMainForm;
begin
  DLL := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'test.dll'));

  If DLL <> 0 then
    begin
      @StarteForm := GetProcAddress(DLL, 'StartApplication');
      If @StarteForm <> nil then
        StarteForm;
    end;
end;

begin
  DLL := 0;

  StartMainForm;

  if DLL <> 0
    then FreeLibrary(DLL);
end;
end.
Die test.dll:
Delphi-Quellcode:
library MainDLL;

{ Haupt-DLL mit Hauptfenster }

uses
  Forms,
  Unit1 in 'unit1.pas{MainForm};

{$R *.res}

procedure StartApplication; stdcall;
begin
  Application.Initialize;
  Application.CreateForm(TForm1, MainForm);
  Application.Run;
end;


exports
  StartApplication;


begin
end.
  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 02:00 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 by Thomas Breitkreuz