Einzelnen Beitrag anzeigen

Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#43

AW: Exception während RS232 Datenempfang

  Alt 20. Mär 2020, 19:11
.. was möglich wäre..

receivedMessage ist eine lokale Variable.
Hier wird dem NewDataRecord^.Data die Adresse, nicht der Inhalt, der receivedMessage zugewiesen.
Am Ende der Methode wird die lokale Variable aufgeräumt.
Die Adresse auf die NewDataRecord^.Data zeigt ist möglicherweise
nicht mehr gültig bzw. überschrieben worden.

Versuche mal ob es so besser wird:
Delphi-Quellcode:
function ReciveDataCom( data : Pointer) : Integer;
var NewDataRecord : PNewDataRecord;
    SendDataRecord : PNewDataRecord;
    Done : Boolean;
    receivedMessage : OptiNumericComm.TMeldung;
    msg : tagMSG;

begin
  if not commTest.initOptiNumericComm(COMPORT) then
  begin
    PostMessage( Form1.Handle, TH_MESSAGE, TH_ERROR, GetCurrentThreadID );
  end;
  while not commTest.checkCommActive do
  begin

  end;
  PostMessage( Form1.Handle, TH_MESSAGE, TH_CONNECTED, GetCurrentThreadID );

  Result := 0;
  Done := False;
  while not Done do
  begin
    Result := Result + 1;
    receivedMessage := commTest.receiveMessage;

    New(NewDataRecord);
    NewDataRecord^.ThreadID := GetCurrentThreadID;
    NewDataRecord^.DataLength := Length(receivedMessage);
    SetLenght(NewDataRecord^.Data, Length(receivedMessage));
    move(receivedMessage, NewDataRecord^.Data, NewDataRecord^.DataLength);
    PostMessage( Form1.Handle, TH_MESSAGE, TH_DATAM, Integer(NewDataRecord));

    //Done := True;

    if (receivedMessage[0] and $0F) = $06 then
    begin
      if PeekMessage(&msg, 0, 0, 0, PM_REMOVE) then
      begin
        case msg.wParam of
          TTH_SEND: begin
            SendDataRecord := PNewDataRecord(msg.lParam);
            commTest.transmitMessage(SendDataRecord.Data);
          end;
        end;
      end;
    end;

  end;
  //All done inform MainForm of ending
  PostMessage( Form1.Handle, TH_MESSAGE, TH_CLOSE, GetCurrentThreadID );
end;
Grüße
Klaus
Klaus

Geändert von Klaus01 (20. Mär 2020 um 19:21 Uhr)
  Mit Zitat antworten Zitat