Delphi-PRAXiS
Seite 7 von 7   « Erste     567   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Exception während RS232 Datenempfang (https://www.delphipraxis.net/203690-exception-waehrend-rs232-datenempfang.html)

Klaus01 25. Mär 2020 12:04

AW: Exception während RS232 Datenempfang
 
Hallo Anton,

bei mir ist ein Tippfehler im Create.
override muss raus.

constructor TCncDataReceiver.create(var messageQueue: TThreadQueue<TMeldung>; const comport: shortInt; const destHandle: THandle);

Grüße
Klaus

akuk 25. Mär 2020 14:29

AW: Exception während RS232 Datenempfang
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Klaus
Zeile 16 CNCMessageDispatcher:
constructor Create(const destHandle: THandle; var messageQueue: TThreadQueue<TMeldung>);// override; hier habe ic das override entfernt
nächste sind 12 Fehler : siehe Beilage:
Sollte das receivedMessage nicht receiveMessage sein ?
Grüsse
Anton

Klaus01 25. Mär 2020 15:36

AW: Exception während RS232 Datenempfang
 
Hallo Anton,

Delphi-Quellcode:
procedure TCncMessageDispatcher.processMessage(meldung: TMeldung);
var
  NewDataRecord : PNewDataRecord;
  SendDataRecord : PNewDataRecord;
  receivedMessage : TMeldung;
  msg : tagMSG;

begin
  receivedMessage := meldung;
  try
    New(NewDataRecord);
    NewDataRecord^.ThreadID := GetCurrentThreadID;
    NewDataRecord^.DataLength := Length(receivedMessage);
    SetLength(NewDataRecord^.Data, Length(receivedMessage));
    move(receivedMessage[0], NewDataRecord^.Data[0], NewDataRecord^.DataLength);
  except
    on e: Exception do
      raise Exception.Create(format('Receiver thread error: %s',[e.Message]));
  end;
  PostMessage( fDestHandle, TH_MESSAGE, TH_DATAM, Integer(NewDataRecord));

  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);
          fCommTest.transmitMessage(SendDataRecord^.Data);
        end;
      end;
    end;
  end;
  PostMessage( fDestHandle, TH_MESSAGE, TH_CLOSE, GetCurrentThreadID );
end;
receivedMessage ist schon richtig, nur das man dort nicht den Type übergeben sollte (mea culpa).
Es sollte dort der Parameter meldung übergeben werden.

Grüße
Klaus

akuk 25. Mär 2020 16:22

AW: Exception während RS232 Datenempfang
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Klaus
da kommt das nechste:
schlimmste ist, ich sehe da kein Fehler:

zBsp Zeile 145:
[dcc32 Fehler] F_MainWindow.pas(145): E2029 ')' erwartet, aber ',' gefunden

fCncMessageTransmitter := TCncMessageTransmitter(fOutMessageQueue, COMPORT, Form1.Handle); // ????

Da bin ich ehrlich gesagt total überfordert
Grüsse
Anton

Klaus01 25. Mär 2020 17:07

AW: Exception während RS232 Datenempfang
 
Zitat:

Zitat von akuk (Beitrag 1460506)
Hallo Klaus
da kommt das nechste:
schlimmste ist, ich sehe da kein Fehler:

zBsp Zeile 145:
[dcc32 Fehler] F_MainWindow.pas(145): E2029 ')' erwartet, aber ',' gefunden

fCncMessageTransmitter := TCncMessageTransmitter(fOutMessageQueue, COMPORT, Form1.Handle); // ????

Da bin ich ehrlich gesagt total überfordert
Grüsse
Anton

Delphi-Quellcode:
fCncMessageTransmitter := TCncMessageTransmitter.create(fOutMessageQueue, COMPORT, Form1.Handle);
Zwei Zeilen tiefer ist nochmal derselbe Lapsus drin.

Grüsse
Klaus

akuk 25. Mär 2020 22:23

AW: Exception während RS232 Datenempfang
 
Hallo Klaus
Dies kommt vielfach vor :

fOutMessageQueue.Enqueue(SendDataRecord);

die Fehler Meldung dazu :

[dcc32 Fehler]
F_MainWindow.pas(616): E2010 Inkompatible Typen: 'TMeldung' und 'TDataMessage'

ich dachte SendDataRecord ist ein Pointer
(SendDataRecord : PDataMessage;) dereferenzieren stimmt ofenbar nicht : SendDataRecord^, wo ist dann die TMeldung drin ?

Grüsse
Anton

Klaus01 26. Mär 2020 06:41

AW: Exception während RS232 Datenempfang
 
Hallo Anton,

TMeldung habe ich nach cncDataTypes verschoben.
Die TInMessageQueue hat einen generischen Type TMeldung.

Delphi-Quellcode:
                 
saetze_holen := saetze_holen + 1;
LongInt_NCByte(saetze_holen,toSend[1],toSend[2],BufByte);{Satz-Nr ablegen}
//New(SendDataRecord2);
//SendDataRecord2^.Data := toSend;
//SendDataRecord2^.ThreadID := GetCurrentThreadID;
//SendDataRecord2^.DataLength := Length(toSend);
//fOutMessageQueue.Enqueue(SendDataRecord2^.Data);
// oder
fOutMessageQueue.Enqueue(toSend);
//PostThreadMessage(Threadinfo.ThreadId,TTH_MESSAGE,TTH_SEND,Integer(SendDataRecord));
Grüße
Klaus

Wenn toSend als Parameter verwendet werden kann, spart das die


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr.
Seite 7 von 7   « Erste     567   

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