![]() |
Warnung in delphi 7.0
Hallo,
ich bekomme beim Übersetzen von einer Unit die zu einem PRG gehört das Mess-Daten über eine serielle Schnittstelle auswertet immer Warnmeldungen angezeigt. Mir ist aber nicht klar warum sie angezeigt werden. Was ist nicht Richtig??? Die Unit wandet die übertragene Bytes in einen Record um, dabei werden die Warnmeldungen 1. Warnung bla,bla : [80] Unsicherer Type 'p1 : pointer' 2. Warnung bla,bla : [79] Unsicherer Code '@ operator' angezeigt. Das Programm funktioniert bis jetzt ohne Probleme, aber wie lange? Oder gibt es für dieses Problem eine andere Lösung?
Code:
Ich hoffe das mir einer weiterhelfen kann.
unit BufferVerwaltungUnit1;
interface uses Windows, Dialogs; const MaschinenZeichen = 3; // Maschinen-Bezeichnung #K01# = 3 Char-Zeichen MessStelleZeichen = 2; // Meßstellen-Bezeichung #T1# = 2 Char-Zeichen BufferLaenge = 13; // Buffer-Länge (entspricht 2 Mess-Werte) type { Maschinen-Bezeichungs Array von 3 Zeichen an der Stelle 0 befindet sich das erste Zeichen, deshalb muss von der MaschinenZeichen 1 abgezogen werden. } TMBezArr = array [0..MaschinenZeichen-1] of Char; { Meßstellen-BezeichungsArray von 2 Zeichen an der Stelle 0 befindet sich das erste Zeichen, deshalb muss von der Anzahl MessStelleZeichen ein 1 ab- gezogen werden. } TMSBezArr = array [0..MessStelleZeichen-1] of Char; { Der TMWCharRec ist der Variable-Type wie der Messwert über die serielle Schnittstelle übertragen wird. Aufbau: MaNr = 3 Charzeichen z.B.: 'K','0','1' MSNr = 2 Charzeichen z.B.: 'T'1' MWd = double z.B.: -112.22 // Länge entspricht 8 Byte Wichtig dabei ist, daß der Record mit "packed" verwendet wird, um den Compiler so einzustellen das soviel Byte reserviert werden, wie gebraucht werden. Record-Aufbau: 13 Byte ---------------------------------------- |0 | 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12| ---------------------------------------- | K| 0| 1| T| 1| D| D| D| D| D| D| D| D| ---------------------------------------- D = 8 Byte von der Variable "double" } TMWCharRec = packed record // Das entspricht 13 Byte, ohne packed 16 MaNr : TMBezArr; // Maschinen-Bezeichnung MSNr : TMSBezArr; // Meßstellen-Bezeichnung MWd : double; // Meß-Wert als double = 8 Byte end; TBuffer = array [0..BufferLaenge-1] of byte; TBufferZeiger = ^TBuffer; TMWCharRecZeiger = ^TMWCharRec; function RecInBuffer (MW1 : TMWCharRec; var buffer1 : TBuffer) : boolean; function BufferInRec (var MW1 : TMWCharRec; buffer1 : TBuffer) : boolean; implementation function RecInBuffer (MW1 : TMWCharRec; var buffer1 : TBuffer) : boolean; var p1 : Pointer; pBuff : TBufferZeiger; begin try p1 := @MW1; // Adresse vom Rec einen Pointer zuweisen pBuff := TBufferZeiger(p1); // Die Adresse zeigt auf den Buff-Zeiger buffer1 := pBuff^; // Die Daten sind im Buff übertragen result := TRUE; except MessageBox (0,'Fehler in der Function: RecInBuffer()','Problem',16); result := FALSE; Exit; end; end; function BufferInRec (var MW1 : TMWCharRec; buffer1 : TBuffer) : boolean; var p1 : Pointer; pMW1 : TMWCharRecZeiger; begin try p1 := @Buffer1; // Adresse vom Buffer1 einen Pointer zuweisen pMW1 := TMWCharRecZeiger(p1); // Die Adresse zeigt auf den MW1-Zeiger MW1 := pMW1^; // Die Daten sind im Buff übertragen result := TRUE; except MessageBox (0,'Fehler in der Function: BufferInRec()','Problem',16); result := FALSE; Exit; end; end; end. |
Re: Warnung in delphi 7.0
Das sind vorbereitende Warnungen, wenn Du später mit .NET arbeiten willst, da sind Pointer ein Teil der Vergangenheit. Planst Du nicht Dein Programm später auf .NET zu portieren, so gehe in die Projektoptionen und schalte die Warnungen zu unsicheren Typen einfach ab :)
...:cat:... |
Re: Warnung in delphi 7.0
Danke für den Hinweis.
Die Warnungen habe ich abgestellt. Aber was ich nicht verstanden habe ist, das mit den .NET und das die Pointer ein Teil der Vergangenheit sind. Ich muss dazu sagen das ich mit Delphi neu angefangen habe. Kann man das so verstehen, wenn man diese Warnmeldungen bekommt, dass der Code bei anderen Delphi - Versionen nicht mehr oder nur fehlerhaft funktioniert? Und wenn das so ist, wie sollte ich die Unit schreiben das sie portiert werden kann? mfg |
Re: Warnung in delphi 7.0
Zitat:
...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 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