Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DLL wegen RTTI zu einem Package umbauen (https://www.delphipraxis.net/75979-dll-wegen-rtti-zu-einem-package-umbauen.html)

Sir Rufo 12. Okt 2014 13:00

AW: DLL wegen RTTI zu einem Package umbauen
 
Und bei einer DLL wäre das anders? :roll:

Gruber_Hans_12345 12. Okt 2014 13:08

AW: DLL wegen RTTI zu einem Package umbauen
 
Hmmmmm... ich hatte halt die Hoffnung ;)

Wenn ich nun eine DLL habe die hat ja dein ihre eigene RTTI.

Sagen wir in der DLL habe ich folgendes Objekt.

Delphi-Quellcode:
type TMeinDLLObject = class
published
  Lines : TStringList;
  Text : string;
end;
in der EXE habe ich nun ein Objekt : TMeinDLLObjekt

Kann ich nun in der EXE rausfinden, das das Objekt eine RTTI hat die nicht in der EXE zu finden ist?
Und es sind dann AUTOMATISCH alle properties (in dem Fall Lines : TStringList) auch in der RTTI der DLL zu finden oder?

Bzw grob gesagt alles was in der DLL mit .Create erzeugt wird hat die RTTI in der EXE und umgekehrt oder?

mkinzler 12. Okt 2014 13:21

AW: DLL wegen RTTI zu einem Package umbauen
 
Warum sollte das notwendig sein? (Neuerzeugung BPL, wenn Exe sich ändert)

himitsu 12. Okt 2014 13:26

AW: DLL wegen RTTI zu einem Package umbauen
 
Rausfinden ob ein Objekt (dessen Klasse) in der RTTI der EXE ist, lässt sich leicht.
Du fragst einfach nach der RTTI zu dieser Klasse und es wird natürlich Keine gefunden.

Aber nur weil die Klassen in beiden Modulen (EXE/DLL) die gleiche/selbe Deklaration haben, müssen die Instanzen und die RTTI nicht kompatibel sein.

Beispiel:
In der EXE wird auf ein Feld/Methode nicht zugegriffen, also lässt der Compiler das weg und schon ist alles Nachfolgende verschoben.
Die Offsets zu den nachfolgenden Feldern/Variablen/VirtuellenMethoden stimmen nicht mehr überein und die Zugriffe gehen auf falsche Adressen.


Zitat:

Warum sollte das notwendig sein? (Neuerzeugung BPL, wenn Exe sich ändert)
Garnicht.

Da die EXE sich auf die BPL bezieht, braucht man nichts machen, wenn man an der EXE etwas ändert.
Ändert sich was an der BPL, dann muß man auch nicht sofort die EXE neu kompilieren, solange sich keine öffentlichen/geteilten Schnittstellen ändern.
Und wenn sich Schnittstellen ändern,dann muß man sowohl EXE, als auch BPL neu kompileren, aber mit dem Unterschied, daß bei der BPL ein Fehler geworfen wird, sobald die Schnittstellen nich zusammenpassen, was bei der DLL nicht passiert und man sich somit mit der DLL schöne Laufzeitfehler einfangen kann.

Gruber_Hans_12345 12. Okt 2014 13:28

AW: DLL wegen RTTI zu einem Package umbauen
 
Zitat:

Zitat von mkinzler (Beitrag 1275669)
Warum sollte das notwendig sein? (Neuerzeugung BPL, wenn Exe sich ändert)

Weil ich es so rausgelesen haben prinzipielle....
Zitat:

When you want to update your DLL (change some function's implementation), you simply compile it, export some new routines and ship the new version. All the applications using this DLL will still work (unless, of course, you've removed existing exported routines). On the other hand, when updating a package, you cannot ship a new version of that package without also updating the executable

mkinzler 12. Okt 2014 13:36

AW: DLL wegen RTTI zu einem Package umbauen
 
Zitat:

Zitat von Gruber_Hans_12345 (Beitrag 1275671)
Zitat:

Zitat von mkinzler (Beitrag 1275669)
Warum sollte das notwendig sein? (Neuerzeugung BPL, wenn Exe sich ändert)

Weil ich es so rausgelesen haben prinzipielle....
Zitat:

When you want to update your DLL (change some function's implementation), you simply compile it, export some new routines and ship the new version. All the applications using this DLL will still work (unless, of course, you've removed existing exported routines). On the other hand, when updating a package, you cannot ship a new version of that package without also updating the executable

Das hat nicht mit Dll/Bpl zu tun, sondern mit den Abhängigkeiten, welche man durch den Austausch von Objekten eingeht. Das Problem, das hier angesprochen wird hat auch nicht mit Änderungen der Dll sondern mit Änderungen der Standard-Bpls (VCL/RTL) und den Änderungen des Compilers zu tun. Beschränkt man sich auf einfache/eigene Objekte sollte eine Bpl genauso problemlos wie Dlls unabhängig von Exe entwickelt werden können.

Gruber_Hans_12345 12. Okt 2014 13:41

AW: DLL wegen RTTI zu einem Package umbauen
 
Ok Danke

Dann werde ich das morgen mal probieren, ob es in meinem Fall so funktioniert wie ich es mir wünsche ... :D

[edit]Würde das dann auch funktionieren, wenn mit dem SELBEN Compiler auf zwei verchiedenen Rechner das ganze mache?
Also auf einem REchner spriche einem Delphi 2007 erzeuge ich die EXE und auf einem anderen Rechner auch mit Delphi 2007 dann die BPL dazu?
Oder würde es da dann krachen?[/edit]

mkinzler 12. Okt 2014 13:47

AW: DLL wegen RTTI zu einem Package umbauen
 
Ja funktioniert. Mit verschieden Compiler meinte ich verschiedene Delphiversionen.
Wenn auf den 2 Rechner die selbe Version (inkl. Patchstand) installiert ist, funktioniert das. Sonst würden die ganzen 3rd-Party Komponenten/Plugins, welche nur als Bpl kommen auch nicht funkionieren.

Gruber_Hans_12345 12. Okt 2014 15:26

AW: DLL wegen RTTI zu einem Package umbauen
 
Ok danke

So hab noch mal einiges gelesen ....

Also wenn ich meine BPL schreibe, und ich WILL ja KEINE NEUE EXE machen müssen wenn ich die BPL aktualisiere.

Darf ich nichts in der interface section ändern, also alle Änderungen in der implemenation Section sind tabu

Stimmt das so? Oder darf ich gewisse änderungen in der interface section machen?
zB.: private variablen in eine Klasse hinzufügen oder gewissen funktionen/procedure dazu?

Also welche Änderungen darf ich in einer unit machen ohne das sich die Version der Package ändert?

Was passiert mit units die ich per uses in die BPL einbinde?
Hat dazu noch wer interne infos?

mkinzler 12. Okt 2014 15:39

AW: DLL wegen RTTI zu einem Package umbauen
 
Zitat:

Darf ich nichts in der interface section ändern, also alle Änderungen in der implemenation Section sind tabu
Was hat die implementation Section mit dem Interface zu tun?
Dort darfst Du so viel verändern wie Du willst.
Im Interface darfst Du nichts entfernen oder funktional verändern; erweitern kannst Du.

Eine Bpl ist eine Dll, mit der zusätzlichen Möglichkeit komplexere (Objekt-)typen im Interface zu verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:32 Uhr.
Seite 3 von 4     123 4      

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