Einzelnen Beitrag anzeigen

jbg

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

Re: Portabilität zwischen Linux und Windows?

  Alt 12. Dez 2005, 18:46
Zitat von Elvis:
Mono ist für .Net 1.1 als komplett anzusehen.
Keines wegs. Ich hatte mal versucht ein minimales VCL Projekt unter Mono für Windows zu starten, wo also eine WinAPI existiert. Es hätte also funktionieren sollen, jedoch schlug AllocateHWnd fehl, weil die Methode Marshal.GetHInstance() zugreift, die nicht in Mono implementiert ist.


Zitat:
Problem ist hier die komische Art und Weise iin der der Delphi.Net compiler deine binaries mit Delphis RTL vermischt.
Delphi.NET produziert auch nur 100%-tigen .NET Code. Es wird aber viel auf P/Invoke gesetzt um auf die WinAPI zugreifen zu können. Da muss man halt am wenigsten neu schreiben.

Zitat:
Die D.Net RTL verhindert, dass es unter Mono läuft.
Jetzt ist die Frage, was unter D.Net RTL verstanden wird. Borland hat das ja neu definiert. Früher war RTL: System, SysUtils, Classes Sei neuestem ist das aber anders. Da ist RTL: System und VclRtl: SysUtils, Classes.
Und mit der RTL alleine funktionieren die Delphi.NET Anwendungen hervorragend unter Mono. Kommt aber die VclRtl hinzu, die die meisten ja gewohnt sind und sie deswegen brauchen, steht man vorerst im Regen. Borland hat dort nämlich bereits im initialization Abschnitt (SysUtils) ein P/Invoke drinnen, das einem die Suppe versalzt.

Zitat:
Jeder andere mainstream .Net compiler erzeugt IL Code, der problemlos unter Mono läuft.
Nochmal: Der Delphi.NET Compiler erzeugt auch IL Code, der problemlos unter Mono läuft. Nur dur die VclRtl (was ja ein Assembly "darstellt") ist das Problem. Das selbe Problem hat man, wenn man in C# ein Assembly einbindet, das auf WinAPI zugreift. Oder andersherum: Wenn man unter MS.NET auf ein Assembly zugreift, dass auf die KDElib zugreift.
Ich verstehe es einfach nicht, warum immer auf Delphi.NET herumgehackt wird. Es liegt einfach nur an den verwendeten Assemblies und nicht am Compiler. Unter C# oder Ruby# oder was weiß ich noch kann man auch P/Invokes benutzen. Man muss mit Delphi.NET auch keine VCL Anwendung schreiben, die von ihrer Herkunft nun mal stark mit der WinAPI verknüpft ist. Man kann auch mit Delphi.NET ein wxNet , Qt# oder GTK# schreiben. Aber weil Borland es einem da mit dem Menüpunkt "VCL-Formularanwendung" so einfach macht, meinen immer alle, man könne nur VCL.NET Anwendungen schreiben und die laufen nicht auf Mono.
Schaut sich eigentlich überhaupt irgendwer außer mir den Quellcode zur RTL.NET, VCLRTL.NET und VCL.NET an? Scheint wohl nicht der fall zu sein. Schwach! (gilt nicht für PersonalEdition Benutzer). Denn sonst würde man sehen, dass in Borland.Delphi.System nicht ein einziges P/Invoke drinnen ist.

Auf das VCL.NET vs. WinForms-Phänomen will ich jetzt erst gar nicht zu sprechen kommen, das würde den Thread sprengen und gehört hier auch nicht hin.

Ach ja und bevor ich es vergesse:
http://unvclx.sourceforge.net/other/MonoPatchD9.zip (for Delphi 2005 only)
  Mit Zitat antworten Zitat