AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warnung in delphi 7.0

Ein Thema von Chemiker · begonnen am 18. Mär 2006 · letzter Beitrag vom 18. Mär 2006
Antwort Antwort
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#1

Warnung in delphi 7.0

  Alt 18. Mär 2006, 13:24
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:
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.
Ich hoffe das mir einer weiterhelfen kann.
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Warnung in delphi 7.0

  Alt 18. Mär 2006, 13:27
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

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Warnung in delphi 7.0

  Alt 18. Mär 2006, 17:07
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Warnung in delphi 7.0

  Alt 18. Mär 2006, 18:04
Zitat von Chemiker:
Aber was ich nicht verstanden habe ist, das mit den .NET und das die Pointer ein Teil der Vergangenheit sind.
In .NET unterscheidet man zwischen "Managed Code" und "Unmanaged Code". Managed Code bietet Garbage Collector, Speicherüberwachung, typisierte Daten und viele andere Dinge. Aus diesen Gründen kann man da nicht mehr direkt mit Pointern arbeiten. Intern macht .NET das natürlich.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 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