![]() |
Records mit string[] in Delphi2009
Hallo!
Ich bin gerade dabei, alle unsere Projekte auf Delphi2009 umzustellen. Dabei stoße ich derzeit sehr oft auf Compiler-Warnings die besagen, dass mit evtl. Datenverlust aufgrund einer String-Umwandlung zu rechnen ist. Das ist auch logisch, da viel mit Records nach folgendem Stil gearbeitet wird:
Delphi-Quellcode:
Die expliziten Längenangaben in Klammern werden benötigt, da die Daten teilweise auch weggeschrieben werden. Wird der Record nun nach folgendem Schema gefüllt, ...
TMyRecord = record
LastName: string[32]; FirstName: string[32]; end;
Delphi-Quellcode:
...kommen die Warnings, da ja versucht wird, ein UNICODE-String einem ShortString (= 32 Länge) zuzuweisen. Gibt es in Delphi2009 nun eine Möglichkeit AUßER einem Typcase alá "MyRecord.LastName := AnsiString(LastName)" dieses Problem eleganter zu lösen oder generell einen anderen Ansatz...??
MyRecord: TMyRecord;
LastName, FirstName: string; begin LastName := 'Hoffmann'; FirstName := 'Marc'; MyRecord.LastName := LastName; MyRecord.FirstName := FirstName; end; Vielen Dank & Gruß, kaju |
Re: Records mit string[] in Delphi2009
Sollte
Delphi-Quellcode:
oder
LastName, FirstName: string[32];
Delphi-Quellcode:
heissen
LastName, FirstName: AnsiString;
|
Re: Records mit string[] in Delphi2009
Wie wäre es keine Typisierten Dateien mehr zu nehmen sondern z.B. XML oder eine DB?
|
Re: Records mit string[] in Delphi2009
Hi...und danke für die schnellen Antworten.
@mkinzler: Okay...dann spare ich mir den Typecast, muss aber dennoch manuell alles ändern...Aber das habe ich mir schon gedacht. Ich hatte gehofft, es gäbe eine neue Möglichkeit bereits im Record den UNICODE-Typ durch Ansi zu ersetzen, das geht aber so nicht. @Bernhard Geyer: Da hast Du für neue Projekt durchaus recht und wird dann auch so gemacht, die vorhandenen kommunizieren aber mittels dieser Strukturen über eine PlugIn-Architektur, die nicht mal so eben ersetzt werden kann...leider. Außerdem reden wir hier von sehr, sehr großen Delphi-Projekten, die dann mühsam angepasst werden müssen (ich habe auch so schon genug Ärger wegen der UNICODE-Umstellung). Naja...bleibt mir wohl nichts anderen übrig, alle die Warnings durch expliziete Typecats zu verscheuchen.... Danke & Gruß, kaju |
Re: Records mit string[] in Delphi2009
Wie gut ist die Plugin-Schnittstelle gekapselt?
Evtl. im Programm mit Strings ohne längenangabe arbeiten und dann in der Plugin-Unit diese auf die längen"-verseuchte" Struktur umsetzen. Parallel noch eine Unicodefähige Version der Schnittstelle hochziehen und dann erst mal beide Versionen im Hauptprogramm unterstützen. |
Re: Records mit string[] in Delphi2009
Hallo!
Prinzipiell möglich aber: Wir können unseren Kunden nicht mal eben ALLE Module austauschen lassen, nur damit diese wieder genauso funktionieren wie vorher (~800MB gepackte Programmdateien in 35 Einzelmodulen). Wir setzen die Projekte Schritt-für-Schritt auf Delphi 2009 um und liefern dann die Updates "Häppchenweise". Daher müssen wir die derzeitigen Schnittstellen auch so weiternutzen, soweit es geht. Tja, ist echt schwieriger und aufwendiger die Umstellung als gedacht 8-) Wie gesagt, für neue (Einzel-)Projekte machen wir das dann anders...Naja, ich wollte halt zunächst die Record-Warnings wegbekommen...Okay, aber danke. Gruß, kaju |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 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