AGB  ·  Datenschutz  ·  Impressum  







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

DCU in neue Delphi-Version einbinden

Ein Thema von TomyN · begonnen am 1. Jul 2024 · letzter Beitrag vom 2. Jul 2024
Antwort Antwort
Seite 1 von 2  1 2      
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#1

DCU in neue Delphi-Version einbinden

  Alt 1. Jul 2024, 18:58
Hallo,

Ich habe folgendes Problem: Ich habe eine DCU Datei, die ich in ein Projekt einbinde. Nun habe ich meine Delphiversion aktualisiert und kann nun die DCU nicht mehr einbinden.
Gibt es da einen Trick?

Tomy
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: DCU in neue Delphi-Version einbinden

  Alt 1. Jul 2024, 19:16
NEIN.

DCUs sind IMMER nur für für den jeweiligen Compiler gültig.
Abgesehn, davon, dass Abhängigkeiten (Units im USES dieser Unit) sich auch noch über die Versionen ändern können.

Delphi 2006 und 2007 hatte mal den "selben" Compiler, aber das war's dann auch schon.



Das ist auch der Grund, warum es immer besser ist, wenn man von Fremdkomponenten den Quellcode bekommt, anstatt nur DCUs.
$2B or not $2B
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
353 Beiträge
 
#3

AW: DCU in neue Delphi-Version einbinden

  Alt 1. Jul 2024, 19:54
Hi,

I have few minutes again before the blackout, and want to point a way that might work.

You need to fix the compiler magic number in the DCU, this might works, but no guarantee.
It did work with different steps from the ones i am listing below, between different versions, like it did work for Delphi2010 and 2009, and between XE8 and Seattle, but not between 2010 and XE8.

so here the steps:
1) build a small or empty project with one added unit lets call it Test.pas, build the same project by your two IDEs.
2) use HEX editor to compare both the DCUs
3) if the difference 4 bytes then change the first one only, most likely and if you are lucky the 4th byte at index 3 is the magic number for the compiler and it will fool the newer version.

after checking the change that worked for Test.pas/Test.dcu apply the same for your own DCU, if you changed more than one byte then... well you know what to do and what to experiment there.

Good luck !

ps: as himitsu pointed if there is huge difference in RTL/VCL dependency between the IDE versions then the steps above will not work, and to make it work there is many other steps of hacking the DCU structure and renaming, will be huge process that will not worth wasting time.
Kas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: DCU in neue Delphi-Version einbinden

  Alt 1. Jul 2024, 21:02
Nun habe ich meine Delphiversion aktualisiert und kann nun die DCU nicht mehr einbinden.
Gibt es da einen Trick?
Wenn es nicht um eine visuelle Komponente geht, kannst du den Quelltext in einer Klasse kapseln, per Interface exponieren und dieses Interface in einer DLL bereitstellen. Das machhst du dann in der Delphiversion, für die du die DCU hast.

Eine Unit, von der ich nur die kompilierte Version habe, würde ich nur im absoluten Notfall einbinden.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: DCU in neue Delphi-Version einbinden

  Alt 1. Jul 2024, 22:41
Im Prinzip habt ihr ja alle recht. Nun ist es aber so, dass es sich hier um den Zugriff auf einen Lizenzdongle handelt, und da bin ich eigentlich ganz froh, dass nicht alles offen liegt.
Bisher hat der Hersteller auch immer die entsprechende DCU bereit gestellt, ab und zu hat es halt etwas gedauert.
Gibt es eigentlich einen technischen Grund für diese enge Versionsbindung und die fehlende Aufwärtskompatibilität der DCUs? Marketingtechnisch ist es doch eher ein Grund gegen ein kostenpflichtiges Update.
Das mit der magischen Nummer hab ich schon probiert, da meckert Delphi dann, dass die DCU fehlerhaft sei. Ich vermute eine interne(?) Checksumme die ich auch ändern müsste, dazu finde ich aber nix im Netz.
Es geht aktuell nur um den Versionssprung von 10.3.2 auf 10.4.2.
I tried the magic number (4th byte) but in this case the compiler will report 'faulty DCU'.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: DCU in neue Delphi-Version einbinden

  Alt 1. Jul 2024, 23:57
Zitat:
Sicherheit durch Verstecken
Nein, das ist nicht sicherer. (Denkt auch grad wer an die Vollbitverschlüsselung?)
Drum ist nahezu alles "Sichere" auch OpenSource, damit jeder die Sicherheit prüfen kann.

DCU und BPL sind nunmal nur für je eine Delphi-Version.

10.3 zu 10.4 verhält sich wie XE zu XE2, bzw. wie D6 zu D7.

In eine DLL gepackt wäre es quasi unabhängig, so lange man nichts delphi-typisches übergibt. (z.B. Delphi-Strings oder Objekte)
Oder in eine andere EXE und via IPC.

Man muß es ja nicht gleich übertreiben.
https://www.delphipraxis.net/213691-...-methoden.html
https://www.delphipraxis.net/213732-...n-gesucht.html
-> https://www.delphipraxis.net/213736-...-fuer-neu.html

https://www.delphipraxis.net/214881-...nis-frage.html
https://www.delphipraxis.net/213949-...elphi-6-a.html
$2B or not $2B

Geändert von himitsu ( 2. Jul 2024 um 00:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: DCU in neue Delphi-Version einbinden

  Alt 2. Jul 2024, 10:18
In eine DLL gepackt wäre es quasi unabhängig
Eine DLL hat aber auch den Nachteil, dass sie relativ leicht ersetzt und der Schutz damit umgangen werden kann.

Ich verwende bei einem Programm seit ca. 25 Jahren (damals mit Delphi 5, jetzt Delphi 12) auch einen Lizenzdongle. Allerdings liegt dafür der benötigte Zugriffscode zum Dongle-Treiber als OBJ-Datei vor, die ich problemlos in die EXE linken kann. Die Delphi-Unit dazu habe ich selbst geschrieben, da mir die mitgelieferte Version irgendwie etwas lieblos zusammengestrickt erschien. Aber ich gestehe dem Hersteller zu, dass er ja sowas auch für zig andere Sprachen liefern muss.

Zwischenzeitlich hatte ich mal versucht, das auf eine simple, personalisierte Lizenznummer umzustellen, die hardwareunabhängig lief. Leider wurde das sehr schnell und übermäßig missbraucht. Man glaubt gar nicht, wie dreist manche Leute sind und mit so einer offensichtlich fremden Lizenz bei mir anrufen und Support erwarten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: DCU in neue Delphi-Version einbinden

  Alt 2. Jul 2024, 11:45
Gibt es eigentlich einen technischen Grund für diese enge Versionsbindung und die fehlende Aufwärtskompatibilität der DCUs?
Eine Fomat ohne Versionsabhängigkeiten zum Compiler sind entweder weniger Flexibel oder die Runtime dafür ist komplexer zu definieren und zu Entwickeln.
Für Delphi haben die Entwickler das damals evtl. in Betracht gezogen und dann verworfen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: DCU in neue Delphi-Version einbinden

  Alt 2. Jul 2024, 14:23
Eine DLL hat aber auch den Nachteil, dass sie relativ leicht ersetzt und der Schutz damit umgangen werden kann.
Verschlüsselte Kommunikation,
oder z.B. die DLL signieren und die Signatur dann auch ordentlich prüfen.
$2B or not $2B
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: DCU in neue Delphi-Version einbinden

  Alt 2. Jul 2024, 17:52
Gibt es eigentlich einen technischen Grund für diese enge Versionsbindung und die fehlende Aufwärtskompatibilität der DCUs?
Eine Fomat ohne Versionsabhängigkeiten zum Compiler sind entweder weniger Flexibel oder die Runtime dafür ist komplexer zu definieren und zu Entwickeln.
Für Delphi haben die Entwickler das damals evtl. in Betracht gezogen und dann verworfen.
Hmm, also ich weiss ja nicht genau, was in so einer DCU drin ist. Entweder bereits kompilierter Code + Infos über die Schnittstellen. Da sehe ich keinen Aufwand in einer neuen Version, evtl. würde im aktuellen Compiler vielleicht etwas effektiver übersetzten, aber man könnte den Code weiter einbinden.
Oder es ist eine Metasprache, dann wäre es doch auch kein Problem, den alten Interpreter (oder Meta zu ASM Compiler) über ein if dcu version = xx einzubinden. Oder man convertiert das ganze halt schnell in das neue Format. Man müsste nur wollen, will man aber nicht bei E. man will ja auch keine Bugs zum 'nulltarif' beheben.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  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 10:46 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