Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Records mit string[] in Delphi2009 (https://www.delphipraxis.net/130614-records-mit-string%5B%5D-delphi2009.html)

kaju74 11. Mär 2009 10:02


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:
  TMyRecord = record
    LastName: string[32];
    FirstName: string[32];
  end;
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, ...

Delphi-Quellcode:
  MyRecord: TMyRecord;
  LastName, FirstName: string;
begin
  LastName := 'Hoffmann';
  FirstName := 'Marc';

  MyRecord.LastName := LastName;
  MyRecord.FirstName := FirstName;
end;
...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...??

Vielen Dank & Gruß,
kaju

mkinzler 11. Mär 2009 10:07

Re: Records mit string[] in Delphi2009
 
Sollte
Delphi-Quellcode:
LastName, FirstName: string[32];
oder
Delphi-Quellcode:
LastName, FirstName: AnsiString;
heissen

Bernhard Geyer 11. Mär 2009 10:15

Re: Records mit string[] in Delphi2009
 
Wie wäre es keine Typisierten Dateien mehr zu nehmen sondern z.B. XML oder eine DB?

kaju74 11. Mär 2009 10:24

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

Bernhard Geyer 11. Mär 2009 10:27

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.

kaju74 11. Mär 2009 10:43

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 23:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz