AGB  ·  Datenschutz  ·  Impressum  







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

Komplettes Projekt in DLL auslagern

Ein Thema von PierreB · begonnen am 6. Feb 2006 · letzter Beitrag vom 3. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
PierreB
(Gast)

n/a Beiträge
 
#1

Komplettes Projekt in DLL auslagern

  Alt 6. Feb 2006, 18:34
Moin,

ich hab da ein mehr oder weniger kompliziertes Problem:

Ich will ein fertiges Programm (besteht circa aus 4 Forms) in eine DLL auslagern, da es seinen Dienst als Plugin in einem anderen Programm tun soll. Also kein Fremdprogramm, ich hab die Sourcen zu dem Programm. Dies soll nun komplett in die DLL wandern um es dann aus dem anderen Programm heraus aufzurufen.

Nur leider sind meine Kenntnisse im Bezug auf DLL und Plugins extrem begrenzt, weshalb ich auf eure Hilfe aufbaue. Die Suchfunktion brachte mehr oder weniger gute Threads zum Vorschau, wo ich zwar ungefähr erkennen konnte wie man ein neues Form in einer DLL erstellt, jedoch möchte (kann) ich nicht alles neuprogrammieren, sondern möchte es wie gesagt nur in die DLL "verschieben". hat da jemand ne Ahnung wie man das einfach hinbekommen kann ?

Danke,
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Komplettes Projekt in DLL auslagern

  Alt 6. Feb 2006, 18:38
Hi,

ich weiß nur, dass sich Firmulare in DLLs nicht gut machen. Es soll irgendwelche Kompatibilitätsprobleme o.ä. geben (Habe ich hier irgendwo einmal gelesen). Für das Auslagern von Formularen sind Packages geeignet, doch musst du einige VCL Packages mit ausliefern.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Komplettes Projekt in DLL auslagern

  Alt 6. Feb 2006, 18:39
Hi,

Erstmal könntest Du natürlich Runtime packages verwenden, aber um mal auf das Problem hier einzugehen ...

Du bindest einfach die Form-Unit in die DLL ein und rufst das Formular dynamisch auf.
Du kannst dann natürlich nicht die globalen Form Variablen benutzen, du musst die anderen Forms auch dynamisch erstellen.

Beispiel:
Delphi-Quellcode:
library Bla;

uses
  uDeineFormUnit;

function ShowForm(): Integer; stdcall;
begin
  with TDeinForm.Create(nil) do
  try
    Result := ShowModal();
  finally
    Free;
  end;
end;

exports
  ShowForm;

begin
end.
mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
PierreB
(Gast)

n/a Beiträge
 
#4

Re: Komplettes Projekt in DLL auslagern

  Alt 6. Feb 2006, 18:41
Zitat:
Du bindest einfach die Form-Unit in die DLL ein und rufst das Formular dynamisch auf.
Du kannst dann natürlich nicht die globalen Form Variablen benutzen, du musst die anderen Forms auch dynamisch erstellen.
So einfach geht das ? Ich werd das ausprobieren, danke erstmal.

@Matze: Danke für den Hinweis, mal gucken ob ich dazu noch was finde.
  Mit Zitat antworten Zitat
PierreB
(Gast)

n/a Beiträge
 
#5

Re: Komplettes Projekt in DLL auslagern

  Alt 10. Feb 2006, 13:48
Moin,

also so wie von mirage beschrieben geht es erstmal wunderbar (mit Form1), jetzt hab ich nur so meine Probleme mit dem zweiten Form. Auf Form1 liegt ein Button, der folgendes Ereignis aufruft:
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i : Integer;
begin
  with TchooseFont.Create(nil) do
  try
     if ShowModal() = mrYes then
     begin
       form1.schriftart.Text := '';
       if Listbox2.Items.Count > -1 then
        begin
         if Listbox2.Items.Count = 1 then Form1.schriftart.text := form1.schriftart.text + ' ' + Listbox2.Items[0] else
          begin
           for i := 0 to Listbox2.Items.Count-1 do
           Form1.schriftart.text := form1.schriftart.text + ' ' + Listbox2.Items[i] + ',';
          end;
        Edit1.Text := '';
        if not Listbox2.Items.Count < -1 then Form1.RichEdit1.Font.Name := Listbox2.Items[0] else Form1.RichEdit1.Font.Name := 'Tahoma';
        end;
     end
  finally
    Free;
  end;
end;
ChooseFont ist in diesem Fall Form2, auf dieser Form liegt ein Button dessen ModulResult Eigenschaft ich auf "mrYes" gesetzt hab. Klicke ich nun auf den Button im Form1, wird Form2 auch korrekt erstellt und läuft. Klicke ich nun auf den Button auf Form2, werden die Werte aus der Listbox auf Form2 nicht wie erwartet ins "schriftart"-Edit auf Form1 übertragen, sondern ich bekomme ne böse Fehlermeldung a'la "
Zugriffsverletzung bei Adresse 0038A72B in Modul 'test.dll'. Lesen von Adresse 00000360.". Dies allerdings nur wenn ich die Forms aus der DLL lade, kompiliere ich das Projekt ganz normal als eigenständige Exe geht alles problemlos. Weiß jemand wo der Fehler liegt ?

Danke,
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Komplettes Projekt in DLL auslagern

  Alt 10. Feb 2006, 14:46
Hi,

Du benutzt die globale Variable Form1, das ist nicht gültig in diesem Kontext (da dein Form ja nicht darin verwendet ist sondern wie im Code oben anders erstellt wird).
Da du ja eh in TForm1 bist gerade kannst Du einfach "Self" nehmen oder Form1. ganz weglassen.

mfG
mirgae228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
PierreB
(Gast)

n/a Beiträge
 
#7

Re: Komplettes Projekt in DLL auslagern

  Alt 10. Feb 2006, 14:55
Vielen Dank, jetzt gehts fehlerfrei.
  Mit Zitat antworten Zitat
PierreB
(Gast)

n/a Beiträge
 
#8

Re: Komplettes Projekt in DLL auslagern

  Alt 10. Feb 2006, 15:10
Argh, jetzt bekomme ich beim Beenden des Programmes das die DLL einbindet so einige Runtime-Errors, unter anderem:
Zitat:
---------------------------
**************.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x00b43192" verweist auf Speicher in "0x01292208". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.
Klicken Sie auf "OK", um das Programm zu beenden.
---------------------------
OK
---------------------------
Und
Zitat:
---------------------------
Error
---------------------------
Runtime error 216 at 0051F1A9
---------------------------
OK
---------------------------
Weiß jemand woran das liegt und wie man es aufheben kann ?
  Mit Zitat antworten Zitat
PierreB
(Gast)

n/a Beiträge
 
#9

Re: Komplettes Projekt in DLL auslagern

  Alt 12. Feb 2006, 08:34
Das Problem an dem Problem ist, dass die Fehler nur kommen wenn ich die DLL in das bereits fertige Projekt einbinde. Erstelle ich ein neues Projekt und binde die DLL ein geht alles fehlerfrei, es muss also an dem bestehenden Projekt liegen. Leider habe ich keine Ahnung wo der Fehler liegen kann, keine ne Idee ?
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#10

Re: Komplettes Projekt in DLL auslagern

  Alt 3. Dez 2006, 10:40
Bei einem anderen Projekt bekomme ich beim Beenden des Programmes nachdem ich ein Form aus einer DLL aufgerufen habe ebenfalls obige zwei Meldungen. Hat jemand eine Idee woran das liegt und wie man es vermeiden kann? Besten Dank.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz