Etliche Proceduren, bei denen Objekte als const deklariert sind, die dann aber innerhalb der Procedure beschrieben werden!
Da kommt natürlich "der linken Seite kann nichts zugewiesen werden"!
Das scheint aber in XE6 noch kompilierbar gewesen zu sein, oder gibt es da auch noch einen Schalter der das zulässt?
Nein. Aber normalerweise kann man ein Object als const-Parameter übergeben, wenn man innerhalb der Methode dann nur seine Properties ändert. Was man nicht ändern kann (und auch niemals tun sollte, wenn der Parameter nicht als var oder out deklariert ist) ist, dem Parameter innerhalb der Methode ein neues Objekt zuzuweisen. Das ist auch dann ein konzeptioneller Fehler, wenn der Parameter ohne const deklariert wurde.
Ich finde es übrigens sehr bedenklich, wenn eine
DLL Funktionen exportiert, die Delphi-spezifische Datentypen wie TStrings verwenden. Sowas funktioniert normalerweise nicht ohne massive Probleme.
DLL und Anwendung müssen auf jeden Fall mit der gleichen Delphi-Version kompiliert werden und sie müssen einen gemeinsamen Memory-Manager verwenden (z. B. in dem man beide mit
run-time packages baut, und dann kann man auch gleich eine
Package statt einer
DLL erzeugen). Wenn man eine
DLL haben will, die unabhängig von der Delphi-Version des Hostprogrammes ist und eventuell sogar von anderen Programmiersprachen aus nutzbar ist darf man nur
API-Level Datentypen verwenden, oder zumindestens
COM-kompatible.