AGB  ·  Datenschutz  ·  Impressum  







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

Der XE8 Fehler-Thread

Ein Thema von Daniel · begonnen am 7. Apr 2015 · letzter Beitrag vom 27. Mai 2015
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#1

AW: Der XE8 Fehler-Thread

  Alt 8. Mai 2015, 23:03
Und weil es soviel Spaß macht, Fehlerreports zu schreiben(), gleich noch einer:

VCL-App calling a FMX-DLL hangs on FreeLibrary (DLLHandle)

https://quality.embarcadero.com/browse/RSP-11125

Fehler betrifft allerdings auch schon XE7, wie ich nun feststellen musste.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.232 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Der XE8 Fehler-Thread

  Alt 8. Mai 2015, 23:21
Und weil es soviel Spaß macht, Fehlerreports zu schreiben(), gleich noch einer:

VCL-App calling a FMX-DLL hangs on FreeLibrary (DLLHandle)

https://quality.embarcadero.com/browse/RSP-11125

Fehler betrifft allerdings auch schon XE7, wie ich nun feststellen musste.
Also du übergibst lebende Objekte über DLL-Grenzen ohne mit gemeinsamen Laufzeitbibliotheken zu arbeiten?
Falls ja (kenn jetzt nicht jede Option in der dproj-Datei) war das eher zufall das das funktioniert hat aber nix was man erwarten sollte. Lebende Objekte über DLL-Grenzen ohne gemeinsame Laufzeitbibliothek zu verwenden ist ein NoGo.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#3

AW: Der XE8 Fehler-Thread

  Alt 9. Mai 2015, 00:22
Was meinst Du mit "gemeinsamen" Laufzeitbibliotheken in Verbindung mit einer VCL-APP, welche eine FMX-DLL verwendet?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#4

AW: Der XE8 Fehler-Thread

  Alt 9. Mai 2015, 06:36
Wenn du eine DLL ohne gemeinsame Laufzeitpackages benutzt, hat die DLL nicht die gleichen Klassen, globale Variablen, usw. wie deine Anwendung. Deshalb funktioniert is und as usw. auch nicht.
Ohne Laufzeitpackages kannst du dann nur einfache Variablen und Interfaces in deinen DLL-Schnittstellen benutzen. (Und mit Sharemem theoretisch auch Delphistrings, ich würde es aber nicht machen.)

Objekte zu übergeben ist, selbst wenn es zufällig funktioniert, aber auch schon deshalb nicht schön, weil die DLL dann erzwungenermaßen mit der gleichen Delphiversion kompiliert sein muss. Eine standardkonforme DLL hingegen kannst du auch mit einer neuen Anwendung verwenden (und auch von anderen Sprachen wie C# aus).

Statt TMemoryStream würde ich daher z.B. IStream verwenden, besser noch aber ein eigenes Interface, da ich gerade erst feststellen musste, dass sich diese Standardinterfaces in Delphi ebenfalls ändern...
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 9. Mai 2015 um 06:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.164 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Der XE8 Fehler-Thread

  Alt 9. Mai 2015, 13:31
Wenn du eine DLL ohne gemeinsame Laufzeitpackages benutzt, hat die DLL nicht die gleichen Klassen,
Darum geht es doch nicht... In der DLL ist doch die Laufzeitumgebung von FMX drin...

Somit kannst Du in Deiner VCL-Anwendung - "geile FMX Formulare" oder andere Fancy-FMX Features nutzen...
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#6

AW: Der XE8 Fehler-Thread

  Alt 9. Mai 2015, 13:37
Als einzige gemeinsame Klasse verwende ich TMemoryStream. Diese stammt aus System.classes und wird sowohl von der VCL als auch von FMX verwendet.
Wenn ich also sowohl VCL-APP und FMX-DLL mit der gleichen Delphi-Version kompiliere, sollten technisch gesehen keine Probleme auftauchen.

Von der Funktionalität funktioniert ja auch alles, wie gewünscht.

Nur eben das entladen der FMX-DLL eben nicht.

Auch bei dem Beispiel, das EMBA mal selber für den VCL to FMX-DLL Access veröffentlicht hat, funktioniert nicht das Entladen der DLL.

Hier muss also ein Problem in Delphi XE7/XE8 liegen.

Wenn ich die DLL mit Delphi <= XE6 kompiliere, klappt es auch mit den entladen der DLL, auch wenn ich die VCL-App mit XE7 oder XE8 kompiliert habe.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Der XE8 Fehler-Thread

  Alt 9. Mai 2015, 13:45
Auch wenn die beiden Klassen aus der gleichen Unit stammen, sind die Klassen in der EXE und DLL anders und du darfst die nicht einfach so übergeben. Was geht wäre das Übergeben eines Pointers auf den Speicherbereich oder wenn du alles in ein Interface kapselst.

Alles andere führt zu komischen Ergebnissen.

Ob es da trotzdem ein Problem mit XE7/XE8 gibt kann man also pauschal nicht sagen, erst wenn man alles richtig gemacht hat und es nicht funktioniert, dann kann man von einem Fehler sprechen.

Die Beispiele von Emba sind auch nicht als Perlen der Programmierung bekannt, daran würde ich gar nichts messen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.756 Beiträge
 
Delphi 12 Athens
 
#8

AW: Der XE8 Fehler-Thread

  Alt 9. Mai 2015, 14:27
Die Beispiele von Emba sind auch nicht als Perlen der Programmierung bekannt
Die findet man übrigens hier: Programming Pearls
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#9

AW: Der XE8 Fehler-Thread

  Alt 9. Mai 2015, 15:58
Auch wenn die beiden Klassen aus der gleichen Unit stammen, sind die Klassen in der EXE und DLL anders und du darfst die nicht einfach so übergeben.
Inwiefern sind die Klassen anders? Also z.B. hier der TMemoryStream?

Alles andere führt zu komischen Ergebnissen.
Ich hatte bislang (also bis Delphi XE6 bzw. Kombination aktuelle Delphis + DLL <= XE6) in der Verwendung VCL-APP zu FMX-DLL keine komischen Ergebnisse, sondern nur funktionierende Programme. Außerdem möchte ich noch mal festhalten, dass es "nur" um das Entladen der DLL geht. Aufruf der DLL, Übergabe und Rückgabe von Daten funktioniert alles ordnungsgemäß.

Habe grade mal eine FMX-DLL erstellt, die nur eine Procedure "ShowAForm" exportiert (also ohne Parameter). Ihre einzige Aufgabe ist dann, wenn aufgerufen, eine leere FMX-Form anzuzeigen.

Also NULL Thema von wegen falscher Datenübergabe oder so. Und siehe da: Bei Freelibrary hängt das Programm.

Wer das immer noch nicht glauben mag: Ich habe diese Demo (XE8-Version) hier mal angehängt (Zuerst FMXFilters.dpr kompilieren = die FMX-DLL) und dann die MyDLLDemo.dpr kompilieren (= die VCL-App).

Wer hier etwas findet, das programmtechnisch falsch ist, ich lasse mich gerne eines Besseren belehren... aber momentan sieht das für mich nach einem BUG aus.
Angehängte Dateien
Dateityp: zip DLLDemo.zip (65,1 KB, 4x aufgerufen)
  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 03:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz