Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#2

AW: Wiederverwendbarkeit / Portierbarkeit zwischen Delphi und Delphi Prism

  Alt 23. Mai 2012, 07:16
Hi Marc,

das ist theoretisch schon machbar. Ich weiss nur nicht, was da in den DLL's alles gemacht wird, aber solange sich das auf Kalkulationen beschränkt ist das theoretisch schon portierbar. Es fehlen allerdings alle Teile der Delphi RTL, so dass Du hier z.B. schon mit einem IntToStr() Probleme haben wirst, da es da so auf der .NET Seite nicht gibt.

2 Sachen sind daher wichtig:
1.) musst Du mit Oxyidizer erstmal die Syntax anpassen ( http://code.remobjects.com/p/oxidizer/ ),
2.) Kann Dir ShineOn als OpenSource Bibliothek Teile der RTL zurück geben ( http://code.remobjects.com/p/shineon/ ).

Nichts desto trotz wirst Du vermutlich an der einen oder anderen Stelle, gerade im Bereich Kommunikation zwischen der Anwendung und der DLL vermutlich in Probleme laufen.

Mit einem 'normalen' Ansatz wirst Du zudem einen harten Schnitt machen müssen. Klar kannst Du normale DLL's auch in .NET Prozesse laden und mittels P/Invoke ausführen, aber ein GetProcAddr in einen .NET Prozess hinein funktioniert nicht. Das Problem sind hierbei auch eher die Kompatibilität der Datentypen (ein Delphi-String muss erstmal in einen .NET String umgewandelt werden).

Wenn Du nicht ein paar Dollar scheust, dann kann Dir hier vermutlich Hydra weiterhelfen ( http://www.remobjects.com/Hydra ).
Hydra war in erster Linie ein Plug-In Framework um eine solche Modularisierung sauber und dynamisch handeln zu können. Später kam dann die Möglichkeit dazu, .NET Plugins in VCL-Prozesse zu laden und auch umgekehrt. Du kannst mit Hydra also sauberes Mix & Match betreiben. Du hast also keinen harten Schnitt sondern kannst Teile der Anwendung bei Bedarf umstellen.

Wenn Du eh schon eine saubere Modularisierung hast, wäre es hier möglich die Kernanwendung und die Module erstmal auf Hydra umzustellen. Der Aufwand hierfür sollte sich in grenzen halten. Danach kannst Du anfangen, sobald sich Änderungen ergeben, diese mit einer Portierung des jeweiligen Moduls zu verbinden. So wird die Anwendung stückweise portiert, ohne dass Du z.B. die bisherige Oberfläche komplett wegwerfen musst. Du kannst auch z.B. in der Kernanwendung neue Teilbereiche in .NET Schreiben und mittels Hydra dort einklinken.

Nichts desto trotz - auch wenn es hier kostenloses / OpenSource und auch kostenpflichtiges Tooling gibt was Dir helfen kann: Der Hauptaufwand den Du haben wirst wird erst einmal sein, die .NET Welt kennen zu lernen. Eine Portierung macht nur dann Sinn, wenn Du vor hast die Vorteile die Dir .NET ggü. Delphi bietet auch zu nutzen. Dazu gehören eben auch andere Architekturen, LINQ, der flächendeckende Einsatz von Interfaces und Generics etc.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat