AGB  ·  Datenschutz  ·  Impressum  







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

CLX-Forms in dll erstellen/aufrufen?

Ein Thema von AndreasJ · begonnen am 23. Apr 2004 · letzter Beitrag vom 26. Apr 2004
Antwort Antwort
AndreasJ

Registriert seit: 23. Apr 2004
7 Beiträge
 
#1

CLX-Forms in dll erstellen/aufrufen?

  Alt 23. Apr 2004, 16:26
Hallo zusammen
Ich stehe im Moment mächtig auf dem Schlauch und bräuchte Hilfe bei einem vielleicht etwas ungewöhnlicherem Problem:

Ich möchte aus einer Delphi/CLX-dll heraus CLX-Forms erzeugen und aufrufen. Das ist notwendig, da diese dll innerhalb einer C++/Qt Application aufgerufen werden soll und von dort aus gehandelt werden muss.

Also habe ich (jetzt mal stark vereinfacht) eine library erzeugt mit der Struktur:


Delphi-Quellcode:
library testLib;

uses
  SysUtils, Classes, QForms, QControls, Qt,
  u_test_form in 'u_test_form.pas{testForm};

{$R *.res} 

procedure start(aApplication: TApplication); export; stdcall;
begin
  aApplication.CreateForm(TtestForm, testForm);
  testForm.Show;
end;

exports start;

begin
end.
wobei TtestForm einfach ein simpelstes Form mit gerade mal einem Button ist. Eben ein TestForm. Mehr ist in der u_test_form unit auch nicht zu finden.

Rufe ich diese startroutine nun aber aus einer starterUnit (ebenfalls CLX) auf, mit 'Application' als Parameter, haut es mir das Programm weg (wärend CreateForm) mit einer ReadError Zugriffsverletzung in der qtintf.dll bei der FormEigenschaft 'Caption', lesender Zugriff auf 000000. Ich verwende übrigens noch Delphi 6.

Ich habe in einem anderen Forum schon mehrmals den anderen Weg gefunden, ohne Application zu verwenden und stattdessen die form 'von Hand' (TtestForm.create(xx)) zu erzeugen und einzuhängen, der ja für vcl auch zu klappen scheint. Unter clx erzeugt aber auch das beim TtestForm.create exakt denselben Fehler, egal, ob ich hier nil, Application oder self (aus der starterUnit mit eigenem clx-Form) als Parameter übergebe.

Kann mir einer sagen, wo mein Denkfehler bei der Angelegenheit liegt bzw. wie ich das Problem lösen kann?

Delphi 7 geht übrigens noch einen Schritt weiter. Eine library die in ihrer uses-Klausel QForms oder QControls einbindet, bzw. eine andere unit, die ihrerseits eine der beiden Q-units einbindet, kracht bereits beim öffnen!

Damit meine ich: library, nur mit der uses ohne irgendwelche forms zu erzeugen und meinetwegen mit einer belanglosen exportierten Procedure. Und eine Starterapplication, die nur diese dll öffnet (mehr nicht, nur öffnet, dadurch, daß sie die belanglose procedure importiert), kracht bereits beim Öffnen in eine CPU-exception.

Also CLX + DLL = Unmöglich ?

Danke, Andreas
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: CLX-Forms in dll erstellen/aufrufen?

  Alt 23. Apr 2004, 18:48
Manchmal rediert es sich doch, wenn man den VCLX Quellcode mal durchforstet hat. Da findet man so Dinge wie:
Zitat:
{
Restrictions on CLX and TApplication in external modules:
CLX and Qt allow only a single instance of the application object - it is
created and destroyed in the initialization and finalization sections of
QControls.pas, respectively. It is the user's responsibility when using
external modules (packages and libraries or shared objects) in their
applications to ensure that only a single instance of TApplication is
created. Please heed the following rules when mixing modules that rely on
visual CLX:
- External libraries (.dll's/.so's) may not refer to visual CLX units
directly or indirectly.
- If you wish to include visual CLX code in an external library, the
external library must be a *package* to avoid duplicate unit
initialization and finalization.
- If your package uses the visualclx package, the main application must also
use it, and should not directly link in visual CLX units.
}
  Mit Zitat antworten Zitat
AndreasJ

Registriert seit: 23. Apr 2004
7 Beiträge
 
#3

Re: CLX-Forms in dll erstellen/aufrufen?

  Alt 26. Apr 2004, 10:13
Hallo jbg

Danke. So etwas in der Richtung hatte ich schon befürchtet.

Wenn ich die Borland-Terminologie richtig verstanden habe, gibt es VCLX erst ab D7 oder? D7 hatte ich nur mal kurz zum Probekompilieren zur Verfügung, sonst noch D6. Aber ich nehme mal stark an, daß die Restriktionen der neueren Version erst recht fürs alte CLX gelten.

So'n Mist. da muss ich doch tatsächlich auf C++/Qt ausweichen wenn Delphi partout nicht will.

P.S.

1. Zeit = Geld (time is money)
2. Wissen = Leistung (knowledge is power)
3. Leistung = Arbeit / Zeit (P = W/t)

Aus 1 und 2 jeweils eingesetzt in 3 folgt:

Wissen = Arbeit/Geld

bzw.

Geld = Arbeit/Wissen

Daraus folgt: Je weniger Du weißt, umso mehr verdienst Du.
  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 05:53 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