01.09.2026
Delphi2C# 2.8.0
Überarbeitete Zeigersimulation
Mit dem aktuellen Update erhält Delphi2C# eine grundlegend überarbeitete Zeigersimulation. Sie unterstützt typische Delphi-Konstrukte wie Pointer, typisierte Zeiger, PChar, GetMem, FreeMem, Move, FillChar, Record-Zeiger und Zeigerarithmetik.
Die Zeigertypen sind als kleine C#-Structs umgesetzt. Dadurch verhalten sich Zeigerzuweisungen Delphi-näher: Kopierte Zeiger besitzen eine unabhängige Position, verweisen aber weiterhin auf denselben zugrunde liegenden Speicher.
Alle Zeigertypen verwenden ein gemeinsames Speichermodell. Der zugrunde liegende Speicher kann zum Beispiel ein verwaltetes Array, ein dynamisches Array, ein explizit angelegter Speicherbereich, eine von anderer Stelle verwaltete Adresse oder ein UTF-16-Zeichenpuffer sein. Konvertierungen zwischen Pointer, Pointer<T>, UntypedPointer und PChar erzeugen dabei normalerweise keine Kopie der Daten.
Für jede Zeigerart ist eindeutig festgelegt, wie weit sich der Zeiger bei arithmetischen Operationen bewegt:
|
Auch die Speicherverwaltung wurde vereinheitlicht. Speicherbereiche, die mit GetMem oder vergleichbaren Funktionen angelegt wurden, werden mit FreeMem freigegeben. Kopierte Zeiger werden dadurch nicht zu zusätzlichen Besitzern desselben Speichers.
Move und FillChar arbeiten konsequent mit Byteanzahlen, unterstützen sowohl Array-Speicher als auch explizit angelegte Speicherbereiche und führen Bereichsprüfungen durch, sofern die Größe des Speicherbereichs bekannt ist. Move berücksichtigt außerdem überlappende Speicherbereiche.
PChar unterstützt nicht kopierende Ansichten auf char[]-Puffer sowie schreibgeschützte Ansichten auf C#-Strings. Da C#-Strings unveränderlich sind, werden für schreibbare Stringoperationen explizite Zeichenpuffer verwendet.
Die aktualisierte Zeigersimulation ist ein fester Bestandteil der von Delphi2C# erzeugten Laufzeitunterstützung und bildet die Grundlage für die Übersetzung zeigerbasierter Delphi-Routinen nach C#.
Die Verwendung der Zeigersimulation ist nun obligatorisch, nicht mehr optional. (Auch weitere obsolete Optionen wurden entfernt.)
Verbesserte Unterstützung für TObject und TClass
Delphi2C# verwendet jetzt ein überarbeitetes Laufzeitmodell für 'TObject' und 'TClass'.
Delphi-Destruktoren werden nicht mehr nur als C#-Finalizer erzeugt, sondern als virtuelle 'Destroy()'-Methoden übersetzt. 'Free()' ruft diese Methode direkt auf und bildet damit das Delphi-Verhalten zuverlässiger nach. Zusätzlich gibt es eine null-sichere Hilfsfunktion 'TObject.Free(obj)', damit auch Delphi-Code wie 'Obj.Free' korrekt übersetzt werden kann, wenn 'Obj' den Wert 'nil' haben kann.
Auch 'TClass' wurde verbessert. Delphi-Klassenreferenzen werden nun als Laufzeit-Metaklassenwerte dargestellt. Dadurch funktionieren Operationen wie 'ClassType', 'ClassName', 'ClassParent', 'InheritsFrom' und das Erzeugen von Objekten über Klassenreferenzen einheitlicher und mit weniger zusätzlichem Code in den erzeugten Klassen.
Diese Änderungen verbessern die Kompatibilität bei Objektlebensdauer, Klassenreferenzen, Metaklassenvergleichen und Factory-Code.
Überarbeitete RTL-Units und verbesserte Zeigerkompatibilität
Die übersetzte System.SysUtils Unit wurde umfassend überarbeitet. Ein Schwerpunkt liegt auf der Kompatibilität mit der ebenfalls aktualisierten Zeigersimulation sowie auf der verbesserten Unterstützung für TObject und TClass.
Die Zeigersimulation dient dabei vor allem als Kompatibilitätsschicht für übersetzten Delphi-Code. Intern verwenden die überarbeiteten RTL-Klassen, soweit möglich, optimierten reinen C#-Code und verwaltete .NET-Datenstrukturen. Dadurch bleibt die Delphi-typische Schnittstelle erhalten, ohne unnötig zeigerbasierte Abläufe innerhalb der Runtime nachzubilden.
Neben System.SysUtils wurden auch die übersetzten Klassen aus System.Classes und System.Generics.Collections überarbeitet. Dazu gehören unter anderem Verbesserungen an Listen, generischen Collections, Enumeratoren, Dictionaries und objektbesitzenden Containern.
18.05.2026
Delphi2C# 2.7.0
Es gibt keine C#-spezifischen Verbesserungen. Lediglich Fehler im gemeinsamen Quellcode der verschiedenen Delphi-Konverter wurden hier ebenfalls behoben.
18.11.2025
Delphi2C# 2.6.0
Das neue Update 2.6.0 von Delphi2C# bringt zahlreiche Verbesserungen
bei der Übersetzung von Interface-bezogenem Delphi-Code nach C#.
Highlights:
1. Bessere Unterstützung für Delphi-Interfaces ohne GUID
|
2. Verbesserte Umsetzung von `as` und `is`
|
3. Interface-Übersetzung
|
Wichtiger Hinweis:
COM-Kompatibilität bleibt in Delphi2C# intern und experimentell. Das Tool erzeugt reine .NET-kompatible C#-Übersetzungen. Eine vollwertige COM-Interop wird nicht angestrebt.
28.10.2024
Delphi2C# 2.5.0
Symbolnamen, die mit der Groß- und Kleinschreibung der Deklaration übereinstimmen
Bei der Konvertierung von Delphi nach C# ist darauf zu achten, dass alle Bezeichner in eine einheitliche Groß- und Kleinschreibung überführt werden. Bisher wurde dies erreicht, indem alle Bezeichner, die sich nur in der Groß- und Kleinschreibung unterschieden, radikal auf eine einheitliche Schreibweise reduziert wurden. Mit Version 2.5.0 gibt es jedoch die Option, für alle Symbole die Schreibweise zu übernehmen, in der sie ursprünglich deklariert wurden. Diese Option ist nun standardmäßig aktiviert, während die alte Methode als veraltet gilt.
In der folgenden Unit werden z.B. eine Konstante, eine Eigenschaft und ein Parameter mit den Namen "name", "Name" und "NAME" verwendet.
unit casesensitivity;
interface
const name: string = 'DefaultName';
type
TPerson = class
private
FName: string;
public
property Name: string read FName write FName;
procedure DisplayInfo(NAME: string);
end;
implementation
procedure TPerson.DisplayInfo(Name: string);
begin
WriteLn('Parameter Name: ' + Name);
WriteLn('Property Name: ' + Self.Name);
WriteLn('Constant Name: ' + casesensitivity.Name);
end;
end.
Mit der veralteten "unify all cases" Option bekamen alle Symbole gleichgeschriebene Namen, wurde die DisplayInfo Prozedur zu:
public void DisplayInfo(string name)
{
Console.WriteLine("Parameter Name: " + name);
Console.WriteLine("Property Name: " + this.name);
Console.WriteLine("Constant Name: " + casesensitivity.casesensitivityInterface.name);
}
Mit der neuen Option werden in der Prozedur alle drei Symbolnamen innerhalb von DisplayInfo verwendet. Dies ist möglich, weil sie in verschiedenen Bereichen deklariert sind. Delphi2Cpp konvertiert die prozedur für den C++Builder in:
public void DisplayInfo(string NAME)
{
Console.WriteLine("Parameter Name: " + NAME);
Console.WriteLine("Property Name: " + this.Name);
Console.WriteLine("Constant Name: " + casesensitivity.casesensitivityInterface.name);
}
Mit der Option zum Abgleichen mit den Deklarationsnamen werden Probleme vermieden, die auftreten, wenn verschiedene Teile des Codes mit unterschiedlichen Bezeichnerlisten übersetzt werden.
19.10.2023
Delphi2C# 2.3
Konvertierung von DFM-Dateien nach C++
- Übernahme des Features von Delphi2Cpp zur Konvertierung des Codes von DFM-Dateien. Dieser kann nun optional in C#-Code konvertiert werden, der zur Laufzeit beim Erstellen des Formulars oder eines Frames ausgeführt wird. Im Wesentlichen besteht der DFM-Code aus einer Reihe einfacher Zuweisungen von Werten zu Komponenteneigenschaften. Delphi2C# gelingt es auch, andere, teilweise komplexe Serialisierungsaktionen auf intuitive und einfache Weise abzubilden. Hierzu werden spezielle Routinen aufgerufen, die den Eigenschaften die Werte nicht direkt zuweisen, sondern diese als Argumente an die Routinen übergeben, in denen dann weitere Aktionen ausgeführt werden können. Speziell für Komponenten von Drittanbietern kann Delphi2C# so konfiguriert werden, dass es solche benutzerdefinierten Funktionen aufruft. Diese Konvertierung des DFM-Codes die unerlässliche Brücke zur Verwendung von C# GUI Bibliotheken.
mehr Details zur DFM-Konvertierung
31.01.2023
Delphi2C# 2.2
Erleichterte Übersetzung unvollständigen Codes
|
04.02.2020 Dokumentation aktualisiert
16.10.2019 Delphi2C# beta Angebot
English
| Letzte Neuigkeiten |
|
01.09.26
Delphi2C# 2.8.0: Grundlegend überarbeitete Zeigersimulation [mehr...] |
|
18.05.26
Delphi2C# 2.7.0: Übersetzungsheuristiken [mehr...] |
|
Diese Homepage ist aus einfachen Texten mit
[Minimal Website]
generiert.
|
Minimal Website ist mit Hilfe des TextTransformers hergestellt.
|
Der TextTransformer ist gemacht mit dem Borland
C++Builder
|