![]() |
Delphi- und .NET - Funktion
Hallo!
Ich versuch grad, mich mal mit Delphi.NET zu beschäftigen. Also mit den Unterschieden zu Win32 und so. Jetzt hätte ich eine Frage: Gibt es einen Unterschied zwischen den zwei Befehlen (Also ich meine jetzt vom Prinzip her - nicht speziell auf WriteLn bezogen):
Delphi-Quellcode:
Also bei dem 1. wird ja, wenn ich das richtig verstanden habe, der Delphi-Code und beim 2. die .NET Funktion benutzt.
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; begin Borland.Delphi.System.WriteLn('Ausgabe'); Console.WriteLine('Ausgabe'); ReadLn; end. |
Re: Delphi- und .NET - Funktion
Warum nimmst du nicht einfach Lutz Roeders genialen Reflector und schaust dir den Code der Borland-Funktion an?
Würde mich nicht wundern, wenn sie Console.WriteLine benutzt, würde mich aber auch nciht wundern wenn es dafür P/Invokes nutzt. :? |
Re: Delphi- und .NET - Funktion
Das einzige wasmir auffällt ist, dass das Assembly 42KB hat, wenn ichs mit der Borland-Funktion mache und nur 19KB, wenn ichs mit der .NET-Funktion mache.
|
Re: Delphi- und .NET - Funktion
Und bevor du noch weitere fragen stellst, die sich mit einem Blick in die Assembly lösen lassen: Werfe doch mal einen Blick in die Assembly.
![]() |
Re: Delphi- und .NET - Funktion
Das habe ich gleich nach dem Beantworten getan. Danke.
Also bei der Delphi-Funktion hat er das Dekompilliert:
Delphi-Quellcode:
Und bei der .NET-Funktion das:
procedure Project2.Project2;
begin System.IsConsole := true; TextOutput.Output.WriteWideString('Hello World using Delphi.NET', 0).WriteLn; System.@_IOTest; TextInput.Input.ReadLn; System.@_IOTest end;
Delphi-Quellcode:
Was heißt das jetzt?
procedure Project1.Project1;
begin System.IsConsole := true; Console.WriteLine('Hello World using Delphi.NET'); Console.ReadLine end; |
Re: Delphi- und .NET - Funktion
Zitat:
Zum Beispiel sind Methoden und Typen im disassemblierten Code Links, die zur Definition führen. Er wird dich dann nach der Borland.Delphi.Dll fragen, die du unter Program files\common files\Borland shared\bds findest. Und *puff* schon siehst du wie Borland diese Funktion geschrieben hat. :) Edit: Übermäßige Zitate entfernt... |
Re: Delphi- und .NET - Funktion
Also ich glaube das habe ich jetzt kapiert. Danke.
Eine Frage nochmal (passt zwar net in den Thread, aber einen neuen aufmachen zahlt sich auch net aus): Mit .NET gibt es dann eigentlich nur noch OpenSource - Programme, oder? :S Also kein Proigrammierer kann seinen Code verbergen. |
Re: Delphi- und .NET - Funktion
Es gibt Obfuskatoren, wie den coolen
![]() Der Reflector wurde auch durch einen gescheucht. ;) Hier ein paar generelle Infos zu was und wie es gemacht wird: ![]() btw: obfuskatierte binaries laden im allgemeinen schneller, sind kleiner und werden auch schneller JIT compiled. (Die Bezeichner sind ja selten länger als 2-3 Zeichen) |
Re: Delphi- und .NET - Funktion
OK, das war klar, dass sich da Microsoft was einfallen lassen hat. ;)
|
Re: Delphi- und .NET - Funktion
Hi,
ich weiß nicht, ob das ganz klar ist, deswegen sage ich das jetzt noch mal gerade. ;) Beim ersten verwendest du die explizit die Borland VCL.net, die - wie ich dir im anderen Thread schon gesagt habe - zur einfachen Migration dient. Dass dadurch das Kompilat/Assembly größer wird ist klar, da du die VCL.net nun miteinkompilieren musst. Beim Zweiten werden Methoden verwendet, die so oder so schon einkompiliert werden, weil sie im entsprechenden Namespace stehen, der (fast) immer mit einkompiliert wird. Wenn du mit .NET programmierst solltest du dich immer für eines entscheiden. Da du nie sicher sein kannst, was Delphi intern in der VCL.net macht. Nachher fliegen dir Pointer (bzw. PInvokes) um die Ohren, die in .NET nix zu suchen haben. :mrgreen: Chris |
Re: Delphi- und .NET - Funktion
Zitat:
|
Re: Delphi- und .NET - Funktion
Pointer gibt es in .NET nach meinen Infos mehr als viele Leute wissen.
Soweit ich weiss baut darauf ihre Speicherverwaltung auf, und du bekommst nur einen Pointer auf einen Pointer, oder anderstrum! Nur das Programmieren mit Pointern ist nicht mehr "In", besonderst nicht von Untypisierten. .NET geht sogar nocht einen Schritt weiter, sämtliche Variablen werden z.b. in Proceduren als Pointer übergeben( Typisiert ), und nur auf Wunsch des Programmierers wird anderst verfahren. Dies führte bei mir zu einer bösen überraschung am Anfang, als ich merkte das meine Variablen überschrieben wurden! |
Re: Delphi- und .NET - Funktion
Zitat:
Aber natürlich brauchst du nun FullTrust und wehe dir, mono/pnet haben andere Größen für ihre Strukturen oder deine Assembly läuft in Win64. (Wobei nur .Net 2.0 Assemblies dort als 64 Bit laufen...) Zitat:
Zitat:
Zitat:
|
Re: Delphi- und .NET - Funktion
Zitat:
Ich habe mit C# Programmiert, und ein Objekt als Parameter übergeben. Dieses wurde natürlich nicht kopiert sondern einfach übergeben. D.h. keine neue Instanz! Allerdings war es eine Lokale Variable! |
Re: Delphi- und .NET - Funktion
Zitat:
Zitat:
Oder gar den parameter in die lokale Variable gepackt? Wäre aber alles uninteressant, denn lokale variablen haben keine Namen. ;) Ist dir eigentlich klar, dass du für "!" genau einen Tastaturanschlag mehr brauchst als für "."? Nutze die Energie beim nächsten mal einfach, um nicht immer solche Schnipsel zu schreiben. ;) |
Re: Delphi- und .NET - Funktion
Ich find das geil, das alle .net programme open source sind. Mit entsprechenden Programmen kann man sich den source .net code anzeigen lassen.
|
Re: Delphi- und .NET - Funktion
Zitat:
Sorry, dich enttäuschen zu müssen. |
Re: Delphi- und .NET - Funktion
@Robert
Bist Du sicher, dass die Obfuskatoren etwas bringen??? Nicht umsonst heisst es "Managed Code". |
Re: Delphi- und .NET - Funktion
Sonst hätte ich es wohl nicht gesagt, sonst würden es nicht soviele benutzen und ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 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