.. 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