AGB  ·  Datenschutz  ·  Impressum  







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

Problem Form in DLL

Ein Thema von tschinkes · begonnen am 29. Jun 2004 · letzter Beitrag vom 29. Okt 2004
Antwort Antwort
Benutzerbild von tschinkes
tschinkes

Registriert seit: 29. Jun 2004
Ort: Mannheim
29 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem Form in DLL

  Alt 29. Jun 2004, 18:54
Hallo,
ich bin echt schon am verzweifeln, hab auch schon tagelang alles probiert aber es will nicht!
Mein Problem:

Und zwar hab ich versucht zwei Formulare extern in eine DLL auszulagern, anfangs ging das auch aber nachdem ich noch weitere Formulare eingefügt habe in die DLL will das gar nicht mehr funktionieren, mit allen! Formularen. Hab echt alle möglichkeiten die ich im Netz gefunden hab, ausprobiert, es will einfach nicht mehr funktioneren.
Habe jetzt momentan folgende Situation:
Habe ein Hauptprogramm und ein Formular in der DLL (mit TTable Komponente, vielleicht liegt es ja daran), wenn ich jetzt auf den ButtonXY klicke sollte es erscheinen.
In der DLL hab ich folgendes deklariert:
Delphi-Quellcode:
library vinyll32;

uses
  Dialogs,
  SysUtils,
  Windows,
Personeneingabe in 'personeneingabe.pas';

function ShowFormPE : Integer; stdcall;

var
Form : TFrmPersoEing;

begin
 Form := TFrmPersoEing.Create(Application);
 Result := Form.ShowModal;
 Form.Free;
end;

exports
ShowFormPE;
Und im Hauptprogramm dann:
Delphi-Quellcode:
...
function ShowFormPE : Integer; stdcall; external 'vinyll32.dll';

...
procedure TFrmStart.BitBtn5Click(Sender: TObject);
begin
ShowFormPE
end;
Sobald ich das Programm so starte, bekomme ich nur einen Zugriffsfehler und das Programm startet nicht. Ich kann auch nicht erkennen anhand debugger wo der fehler ist!
Komischerweise (in meiner Projektgruppe) wenn ich dann die vinyll32.dll Aktiv setzte und diese starte, läudt das Programm soweit, bis ich diese besagte Form öffne.
Bin echt schon am verzweifeln, wäre echt cool wenn mir jemand helfen könnte!
Tobi
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#2

Re: Problem Form in DLL

  Alt 30. Jun 2004, 13:15
hmmm

ich hab alles einfach übertragen, und die uses reingehängt, und es lief...

sach ma, kannes sein das du die unit Forms nit drin hast???
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Problem Form in DLL

  Alt 30. Jun 2004, 13:56
Zitat von tschinkes:
Und zwar hab ich versucht zwei Formulare extern in eine DLL auszulagern.....
Unabhängig von deinem Problem will ich dir mal die Nachteile von Formularen in DLLs aufzählen:
  • Wenn du nicht sowohl in deiner Anwendung, als auch in deiner DLL die Borland VCL Packages verwendest, dann benötigen Anwendung + DLL fast doppelt soviel Speicher als wenn du keine DLL benützen würdest.
    Grund: sowohl die Anwendung, als auch die DLL benötigen viele Units (v.a. Forms.pas) aus der DLL.
  • DLLs können nur Funktionen exportieren. Damit wird Objektorientiertes Programmieren erschwert.
  • Globale Objekte, wird z.B. Application sind in deiner Anwendung und der DLL verschieden.
    Dies ist wahrscheinlich auch die Ursache für deine Probleme.
Alle diese Probleme werden mit Packages gelöst. Natürlich können Packages nur von Borland-Anwendungen benutzt werden.
Andreas
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#4

Re: Problem Form in DLL

  Alt 30. Jun 2004, 14:01
hallo tschinkes,

ich hatte auch mal ähnliche Probleme, wenn in beiden Projekten (exe und dll) das Laufzeitpackage vcl50.bpl (bzw. vcl60.bpl usw.) verwendet wurde.
Damit es lief, mußten wir die Laufzeitpackages im dll-Projekt ausschalten, was natürlich die dll größer werden ließ.

Roderich
  Mit Zitat antworten Zitat
Benutzerbild von tschinkes
tschinkes

Registriert seit: 29. Jun 2004
Ort: Mannheim
29 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem Form in DLL

  Alt 1. Jul 2004, 21:00
Danke für eure Hilfe, das Forum ist echt nur cool, dicke fette Lobe!

Hab mein Problem abba selbst lösen können:
Hatte Units in meinen Formularen in der DLL angegeben, die in der Hauptform integriert waren. Habse gelöscht und es lief wieder.

Wegen DLL: Momentan such ich eben eine möglichkeit soviel wie möglich auszulagern, damit ich bei Updates nur wirklich die jeweiligen DLL's reinpacken muss. Und andere möglichkeiten kenn ich noch nicht, muss mich da noch etwas vertiefen. (hab ja erst vor zwei Wochen angefangen Delphi zu lernen . Ich muss aber sagen, Delphi ist echt einfach!

Hab aber mal eine andere frage zu meinen Formen in der DLL.
Und zwar, ich hab eine Form in der Hauptform, die auf weitere Formen zugreift, wie kann ich diese in eine DLL einbinden? Diese greifen auch auf die Hauptform zu. Ich weiß das hat was mit Handle zu tun aber darüber weiß ich eben noch nichts!
Wäre cool, wenn mir jemand etwas dabei helfen könnte es zu verstehen wie das funzt!!!!!

Nochmals fettes Lob an das Board! Echt cool, bin begeistert!!!
Tobi
  Mit Zitat antworten Zitat
ahachmann

Registriert seit: 15. Sep 2003
Ort: Hamburg
54 Beiträge
 
Delphi 7 Professional
 
#6

Re: Problem Form in DLL

  Alt 29. Okt 2004, 20:34
Hallo,
ich versuche grad das Selbe umzusetzen, habe aber das Problem,
daß er im DLL Project Application nicht kennt.
mein Code sieht so aus:
Delphi-Quellcode:
library PDFDocuments;

uses
  SysUtils,
  Classes,
  Dialogs,
  Windows,
  UPDFReport in '..\Source\UPDFReport.pas{PDFDataModule: TDataModule},
  UPageTimeTable in '..\Source\UPageTimeTable.pas{frmTimeTable},
  UFPageBill in '..\Source\UFPageBill.pas{frmFirstPage},
  UDocument in '..\Source\UDocument.pas';

{$R *.res}

  Procedure WritePDF();stdcall;
    var Form: TfrmFirstPage;
  begin
    Form := TfrmFirstPage.Create(Application);
    Form.Show;
    form.Free;
  end;

exports
  WritePDF;

begin

end.
Thx,
ALexander
  Mit Zitat antworten Zitat
Benutzerbild von Nothine
Nothine

Registriert seit: 3. Jul 2004
Ort: Mülheim an der Ruhr
198 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Problem Form in DLL

  Alt 29. Okt 2004, 23:07
@ahachmann: du musst du unit Forms einbinden, denn in der ist Application definiert
if ThisPost is senseless then
ThisPost.WasPostedBy := SomeoneElse();
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:28 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