AGB  ·  Datenschutz  ·  Impressum  







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

Formular in DLL

Ein Thema von sebi87 · begonnen am 30. Jan 2010 · letzter Beitrag vom 2. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
sebi87
(Gast)

n/a Beiträge
 
#1

Formular in DLL

  Alt 30. Jan 2010, 20:11
Hallo Leute,

ich habe eines meiner Formulare in eine DLL ausgelagert und erzeuge und öffne das Formular von meiner HAuptanwendung aus.

Funktion in der DLL um das Formular ertellen und anzuzeigen
Delphi-Quellcode:
procedure PluginForm(appHandle: THandle) ;
var
  oldApp : THandle ;
begin
  oldApp := Application.Handle ;
  if appHandle = 0 then appHandle := GetActiveWindow ;
  Application.Handle := appHandle ;
  try
    with TForm1.Create(Application) do
    try
      ShowModal ;
    finally
      Release ;
    end ;
 except
   On E: Exception Do Application.HandleException(E) ;
  end ;
  Application.Handle := oldApp ;
end ;
in meinem Hauptprogramm rufe ich das ganze dann so auf:
PluginForm(Application.Handle) ; Natürlich nachdem die DLL ordnungsgemäß geladen wurde.

Jetzt habe ich nur das Problem das nach dem Schließen des Formulars dieser Fehler auftaucht
Zitat:
Im Projekt ... ist eine Exeption der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei
Adresse 01391861. Lesen von Adresse 903E8739'. Prozeß wurde angehalten. Mit Einzelne Anweisunf oder Start fortsetzen
Danach läuft das ganze wieder ohne Probleme.

Wie kann ich diesen Fehler beheben.
Bitte um Hilfe, ich bin am verzeifeln.

Grüße Sebastian
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Formular in DLL

  Alt 30. Jan 2010, 20:21
Ich würde das Fenster nicht der Application zuordnen (Owner). Am Besten Nil und dann beim Beenden der Dll freigeben
Markus Kinzler
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#3

Re: Formular in DLL

  Alt 30. Jan 2010, 20:56
Mit nil tritt der selbe Fehler auf...

Die DLL wird beim Beenden des Programms wieder Freigegeben.

Der Fehler tritt bei Schliesen des Fensters auf.

Grüße Sebastain
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Formular in DLL

  Alt 30. Jan 2010, 21:01
Du musst die form innerhalb der Dll freigeben
Markus Kinzler
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#5

Re: Formular in DLL

  Alt 31. Jan 2010, 08:16
Und wie gebe ich die Form in der DLL Frei?

Hat da jemand ein kleines Beispiel?

Grüße Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Formular in DLL

  Alt 31. Jan 2010, 08:26
so wie du die Funktion PluginForm hast brauchst du einfach nur noch eine weitere Funktion machen die du im OnDestroy deiner Anwendung aufrufst welche dann die Form in der DLL frei gibt.

Pseudocode
Delphi-Quellcode:
procedure PluginForm();
begin
  GlobalForm := TGlobalForm.Create();
end;

procedure PlugoutForm();
begin
  GlobalForm.Release();
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#7

Re: Formular in DLL

  Alt 31. Jan 2010, 09:25
Das ist ja auch kein Problem,

die Speicherzugriffverletzung entsteht nach dem Rechtmäßigen schließen des Formulars. Die Anwendung selber läuft weiter.

Nochmals zum Ablauf.

1. laden der DLL beim Anwendungsstart
2. Öffnen des Formulars aus der DLL duch Button
3. Arbeiten mit dem Formular
4. Schließen des Formulars
5. Anwendung läuft weiter
6. Entfernen der DLL beim Anwendungs Ende

Der Fehler erscheint zwischen 4. und 5.


Grüße Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.194 Beiträge
 
Delphi 12 Athens
 
#8

Re: Formular in DLL

  Alt 31. Jan 2010, 09:38
Es ist halt nicht so einfach, bzw. unmöglich, wenn versucht die VCL einer DLL mit der einer EXE oder anderen DLL zu verbinden.

Binde also deine Forms der DLL nicht an die Applikation der EXE.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#9

Re: Formular in DLL

  Alt 31. Jan 2010, 10:32
Wie muss ich das verstehen?

Es muss doch möglich sein ein Formular aus einer DLL zu Laden
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Formular in DLL

  Alt 31. Jan 2010, 10:37
Ja aber wie schon öfters gesagt, muss die komplette Verwaltung und alle Zugriffe adaruf innerhalb der Dll erfolgen.
Markus Kinzler
  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 17:36 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