Thema: Delphi Warnung in delphi 7.0

Einzelnen Beitrag anzeigen

Benutzerbild von Chemiker
Chemiker

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

Warnung in delphi 7.0

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