AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Exception während RS232 Datenempfang
Thema durchsuchen
Ansicht
Themen-Optionen

Exception während RS232 Datenempfang

Ein Thema von akuk · begonnen am 12. Mär 2020 · letzter Beitrag vom 26. Mär 2020
 
Klaus01

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

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
 


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 21:54 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