AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Frames aus DLLs..? TFont <> TFont!?
Thema durchsuchen
Ansicht
Themen-Optionen

Frames aus DLLs..? TFont <> TFont!?

Ein Thema von Ganymed · begonnen am 24. Sep 2003 · letzter Beitrag vom 14. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Ganymed

Registriert seit: 11. Jun 2003
Ort: Hameln
56 Beiträge
 
Delphi 7 Architect
 
#1

Frames aus DLLs..? TFont <> TFont!?

  Alt 24. Sep 2003, 11:50
Hi!

Das Problem dürfte allseits bekannt sein:

Wenn ich ein Frame aus einer DLL importieren will, bekomme ich beim Erzeugen des selbigen (Parent ist ein TForm aus der EXE) die Fehlermeldung "Cannot assign TFont to TFont".

Des Pudels Kern scheint ja zu sein, dass für EXEs und DLLs verschiedene Packages verwendet werden (das zumindest stand in einigen Groups). Die Lösung wäre also folglich, die DLL mit den Packages der EXE zu kompilieren. Nur: Wie geht das? Die Fehlermeldung kommt unabhängig ob ich "Build with runtime packages" in den Projektoptionen angewählt habe oder nicht (trotz Rebuild).

Kann mir jemand konkrete Lösungsvorschläge anbieten?

Danke im Voraus

Ganymed
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Frames aus DLLs..? TFont <> TFont!?

  Alt 24. Sep 2003, 14:55
Beides, EXE und DLL müssen mit Packages kompiliert werden. In deinem Falle muß also bei "Required Packages" -> "benötigte Packages" in den Projektoptionen der EXE und DLL auch das Packages "VCL" enthalten sein.

Gruß hagen
  Mit Zitat antworten Zitat
Ganymed

Registriert seit: 11. Jun 2003
Ort: Hameln
56 Beiträge
 
Delphi 7 Architect
 
#3

Re: Frames aus DLLs..? TFont <> TFont!?

  Alt 24. Sep 2003, 15:30
Die Packeges in den Projektoptionen der EXE und der DLL sind identisch.
Aber ich versteh' nicht so ganz, was du jetzt genau meinst...
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: Frames aus DLLs..? TFont <> TFont!?

  Alt 24. Sep 2003, 15:55
Gut, und bei beiden Projekten, sprich der EXE und DLL, ist in den Projektoptionen die Checkbox angehakt das man Packages benutzen will ?
Wenn so, dann kompiliere beides komplett neu. Danach sollte alles funktionieren.

Gruß Hagen
  Mit Zitat antworten Zitat
Ganymed

Registriert seit: 11. Jun 2003
Ort: Hameln
56 Beiträge
 
Delphi 7 Architect
 
#5

Re: Frames aus DLLs..? TFont <> TFont!?

  Alt 24. Sep 2003, 16:06
Hm, , ich hab jetzt bei beiden Projekten unter "Build with runtime packages" das Package "vcl" angegeben... Dass jetzt alles funktionieren sollte, sollte man annehmen. Leider alles graue Theorie.

Denn jetzt bekomme ich einen Klassenkonflikt: "A class named TGIFFrame already exists"...

Alles Sch***

Wieso lässt sich das denn nicht mit den Design-Time-Packages machen???
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#6

Re: Frames aus DLLs..? TFont <> TFont!?

  Alt 24. Sep 2003, 17:01
Dann benutzen EXE und DLL ebenfalls die TGifImage Komponente. Da diese sich mit RegisterClass() im VCL Package registriert und BEIDE die EXE und DLL diese Komponente NICHT aus einem Package heraus benutzen, kommt es zu diesem Fehler. Das liegt daran das du versucht's ein "Misch-Package-Nicht-Package" System zu bauen. Ich vertrete die Auffassung, entweder ALLES mit Packages oder GARNICHT's.

Also, in den "Required Packages" alle Packages aufführen die Klassen enthalten die von der EXE und den DLL's gemeinsam benutzt werden.

Zitat:
Wieso lässt sich das denn nicht mit den Design-Time-Packages machen???
Noch gefährlicher. Ab D6 können DesignTime Packages nur noch durch die IDE selber benutzt werden. Dafür hat Borland gesorgt indem DesignTime Packages die Unit Prxies.dcu benötigen. Proxies.dcu liegt nicht als Source vor und enthält "Schutzcode" der verhindert das man diese Unit ausserhalb der IDE benutzen kann. Somit können DesignTime Packages nicht in eigenen Anwendungen geladen werden. Zudem würde es Lizensbestimmungen brechen.

Gruß Hagen
  Mit Zitat antworten Zitat
Ganymed

Registriert seit: 11. Jun 2003
Ort: Hameln
56 Beiträge
 
Delphi 7 Architect
 
#7

Re: Frames aus DLLs..? TFont <> TFont!?

  Alt 25. Sep 2003, 10:05
Zitat von negaH:
(...) Das liegt daran das du versucht's ein "Misch-Package-Nicht-Package" System zu bauen. Ich vertrete die Auffassung, entweder ALLES mit Packages oder GARNICHT's.
Eigentlich versuche ich nur, ein Frame aus einer DLL zu laden , welche Packages dafür benutzt wwerden, ist mir gleich. Hauptsache es funktionuckelt irgendwie (anständig).

Von den "Required Packages" die du erwähnst, sehe ich keine Spur. In meinen Projektoptionen kann ich nur die Packages einstellen, die mit kompiliert werden sollen ("Project | Options", Register "Packages"). Das können entweder "Designtime Packages" (das ist eine lange Liste mit Check-Boxen), oder "Runtime packages" (das ist unten das kleine Text-Edit) sein.

Bestenfalls gibt ein ein "Requires"-Teil, wenn ich das ganze als Package machen wollte. (Es gibt die Möglichkeit, Quellcode u.ä. in Laufzeit-Packages auszulagen und zur Laufzeit dynamisch einzubinden - was ist aber nicht will)...

Ganymed
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Frames aus DLLs..? TFont <> TFont!?

  Alt 25. Sep 2003, 13:02
Genau das Edit ist "required Packages", dort solten alle Packages stehen deren Komponenten gemeinsam benutzt werden.

Gruß Hagen
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Frames aus DLLs..? TFont <> TFont!?

  Alt 11. Mär 2005, 16:30
Ist zwar ein alter Thread, doch bin ich durch ein anderes Forum auf Deine Methode gestossen.

Ich habe das Problem, dass ich die EXE nicht so erstellen kann, wie Du das hier beschreibst:

http://www.entwickler-forum.de/webx?...d.1@.ee86b38/9

Delphi-Quellcode:
// hier das Project für die EXE
// diese MUSS mit Laufzeitpackages compiliert werden und muß in der
// required Packages Option das package MAIN.bpl enthalten
program project1;
 
......
 
 
begin
  Application.Initialize;
// Mainform aus Package Main.bpl wird statisch geladen
  Applciation.CreateForm(TMainForm, MainForm);
  Application.Run;
end.
Wie erstelle ich mir denn solch eine EXE? Eine Form enthält sie ja nicht, da die "MainForm" in das Package "Main.bpl" ausgelagert ist. Ich bin über "File -> New Application" gegangen und habe "Unit1" aus dem Projekt gelöscht, dann im Projekt-Manager auf "Project1.exe" und "View Source" - aber wie weiter?

Auch habe ich offensichtlich ein ähnliches Problem, wie mein Vorposter, denn das mit dem "requires" funktioniert doch nur bei Packages selbst, oder?

Anbei ein Screenshot von meinen Projekt-Optionen.

Da mich Dein Ansatz sehr interessiert, würde ich das auch gerne mal testen wollen
Angehängte Grafiken
Dateityp: bmp options_138.bmp (494,4 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Frames aus DLLs..? TFont <> TFont!?

  Alt 12. Mär 2005, 16:10
Ok nochmal Step by Step:

1.) erzeuge ein neues Formular mit Klassennamen TMainForm.
2.) speicher das unter Unit "FormMain.pas" ab.
3.) erzeuge nun ein neues Package mit Namen "Main", als RunTime package
4.) füge in dieses Package Unit "FormMain.pas" hinzu
5.) kompiliere es
6.) erzeuge neue Anwendung, und lösche Unit1.pas raus
7.) in Projektoptionen "mit packages" kompilieren, und Main in benötigte packages eintragen
8.) Füge "FormMain.pas" in Formulare hinzu
9.) kompiliere EXE


Die EXE benötigt nun alle Packages wie VCL, DB usw. und eben auch das neue Package MAIN. In diesem Package ist das Hauptformular in Unit FormMain.pas. Alles was damit zu tun hat sprich Code/Resource usw. wird also in dieses package gespeichert statt in der EXE. Die EXE selber wird höchsten 17 Kb groß sein.

gruß Hagen
  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 14:41 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