Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form in DLL in Verbindung mit Datenmodule (https://www.delphipraxis.net/104323-form-dll-verbindung-mit-datenmodule.html)

AirJordan 1. Dez 2007 14:54


Form in DLL in Verbindung mit Datenmodule
 
Hallo,

hoffe ihr könnt mir einen Tipp geben, wie man folgende DLL´s korrekt erstellen kann. :-D

Ich habe eine Anwendung die sich nach dem Start in die Taskleiste verschiebt. Von dort kann man dann die einzelnen
Formulare aufrufen. Es handelt sich immer um Formulare die Verbindungen zu einem Datenmodul haben. Ich möchte diese
in DLL´s auslagern.

Ich habe in der jeweilgen Projektdatei der DLL´s folgenden Aufbau:

Delphi-Quellcode:
library formularName1;

uses
  Forms,
  formularName1 in 'form1.pas' {form1},
  formularDaten in 'formdaten.pas' {formularDaten: TDataModule};

{$E dll}

{$R *.res}

procedure ShowFormular1; stdcall;
begin
  formularDaten := TformularDaten.Create(Application);
  formularName1 := TformularName1.Create(Application);
  try
    formularName1.ShowModal;
  finally
    formularName1.Release;
    formularDaten.Free;
  end;
end;

exports ShowFormular1;

begin
end.
Das Hauptprogramm erzeugt beim Start auch eine Instanz des DatenModuls. Das habe ich aber bereits einmal
komplett entfernt. Trotzdem wird nach dem Beenden des Programms (nicht beim Schliessen der Formulare aus
der DLL!) eine Exception ausgelöst.

Wie baut man soetwas am besten auf? Hoffe ihr könnt mir einen Tipp geben. Ich habe hier schon gesucht, aber
eine solche DLL / Konstellation nicht gefunden. :gruebel:

Grüße
Holger

Bernhard Geyer 2. Dez 2007 08:05

Re: Form in DLL in Verbindung mit Datenmodule
 
Delphi-Quellcode:
    formularName1.Release;
    formularDaten.Free;
Doppelt gemoppelt! Bei ShowModal reicht einfach ein Free. Bei Show sollte man mit Release die freigabe erledigen.

Heffalump 2. Dez 2007 09:12

Re: Form in DLL in Verbindung mit Datenmodule
 
Zitat:

Zitat von Bernhard Geyer
Delphi-Quellcode:
    formularName1.Release;
    formularDaten.Free;
Doppelt gemoppelt! Bei ShowModal reicht einfach ein Free. Bei Show sollte man mit Release die freigabe erledigen.

Solche Fragen stellen sich bei .Net einfach nicht:-).

Bernhard Geyer 2. Dez 2007 09:15

Re: Form in DLL in Verbindung mit Datenmodule
 
Zitat:

Zitat von Heffalump
Zitat:

Zitat von Bernhard Geyer
Delphi-Quellcode:
    formularName1.Release;
    formularDaten.Free;
Doppelt gemoppelt! Bei ShowModal reicht einfach ein Free. Bei Show sollte man mit Release die freigabe erledigen.

Solche Fragen stellen sich bei .Net einfach nicht:-).

Und? Erstens ist es eine Frage für Win32 und Ressoucentechnisch kann man auch unter .NET Probleme bekommen wenn man das Dispose-Pattern zur freigabe von Handels etc. nicht korrekt anwendet.

AirJordan 2. Dez 2007 10:18

Re: Form in DLL in Verbindung mit Datenmodule
 
Zitat:

Zitat von Bernhard Geyer
Delphi-Quellcode:
    formularName1.Release;
    formularDaten.Free;
Doppelt gemoppelt! Bei ShowModal reicht einfach ein Free. Bei Show sollte man mit Release die freigabe erledigen.

Hallo Bernhard,

danke für den Hinweis. Das Datenmodul wird dann auch mit freigegeben? Es wird ja in der Routine vor dem
Formular erst erstellt! :gruebel:

Meine Exception ist geblieben.

Zitat:

exception class : EAccessViolation
exception message : Zugriffsverletzung bei Adresse 5B0F1531 in Modul 'uxtheme.dll'. Lesen von Adresse 00000014.

main thread ($970):
5b0f1531 +011 uxtheme.dll
5b0f495a +01a uxtheme.dll CloseThemeData
Die Ursache scheint also noch an einer anderen Stelle zu liegen.

Grüße
Holger

Bernhard Geyer 2. Dez 2007 16:13

Re: Form in DLL in Verbindung mit Datenmodule
 
Zitat:

Zitat von AirJordan
danke für den Hinweis. Das Datenmodul wird dann auch mit freigegeben? Es wird ja in der Routine vor dem
Formular erst erstellt! :gruebel:

Sorry. Verlesen. Mach 2*Free. Release ist nur mit Nicht-Modal angezeigten Formularen nötig um keine Windows-messages auf freigegene Formulare "aufschlagen" zu lassen.

Zitat:

Zitat von AirJordan
exception class : EAccessViolation
exception message : Zugriffsverletzung bei Adresse 5B0F1531 in Modul 'uxtheme.dll'. Lesen von Adresse 00000014.

main thread ($970):
5b0f1531 +011 uxtheme.dll
5b0f495a +01a uxtheme.dll CloseThemeData

Verwendst du Standard-VCL-Controls oder 3th-Party-Kompos.

AirJordan 2. Dez 2007 16:35

Re: Form in DLL in Verbindung mit Datenmodule
 
Zitat:

Zitat von Bernhard Geyer
Sorry. Verlesen. Mach 2*Free. Release ist nur mit Nicht-Modal angezeigten Formularen nötig um keine Windows-messages auf freigegene Formulare "aufschlagen" zu lassen.

Ok, danke. Habe ich korrigiert. :thumb:

Zitat:

Zitat von Bernhard Geyer
Verwendst du Standard-VCL-Controls oder 3th-Party-Kompos.

Ja, ich verwende 3th-Party-Komponenten.

Grüße
Holger

Bernhard Geyer 2. Dez 2007 17:03

Re: Form in DLL in Verbindung mit Datenmodule
 
Zitat:

Zitat von AirJordan
Ja, ich verwende 3th-Party-Komponenten.

Und welche? Evtl kennt ja jemand ähnliche Probleme mit diesen.

AirJordan 2. Dez 2007 17:08

Re: Form in DLL in Verbindung mit Datenmodule
 
Hallo Bernhard,

sorry, das ich mir alles so langsam aus der Nase ziehen lasse. :zwinker:

In dieser DLL sind DBMaskEdit-Felder und ein Grid von DevExpress sowie PngButtons.

Grüße
Holger

AirJordan 2. Dez 2007 18:16

Re: Form in DLL in Verbindung mit Datenmodule
 
Antwort und Lösung gefunden :thumb:


Delphi-Quellcode:
library formularName1;

uses
  SysUtils,
  Classes,
  Forms,
  dxThemeManager,
  formularName1 in 'form1.pas' {form1},
  formularDaten in 'formdaten.pas' {formularDaten: TDataModule};

{$E dll}

{$R *.res}

procedure CloseThemen;
begin
  CloseAllThemes;
end;

procedure ShowFormular1; stdcall;
begin
  formularDaten := TformularDaten.Create(Application);
  formularName1 := TformularName1.Create(Application);
  try
    formularName1.ShowModal;
  finally
    FreeAndNil(formularName1);
    FreeAndNil(formularDaten);
  end;
end;

exports ShowFormular1,
        CloseThemen;

begin
end.
Und im Hauptprogramm:

Delphi-Quellcode:

[..]

initialization

finalization
  CloseThemen;
Und schon gibt es keine Exception. :cheers:

Grüße
Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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