ich habe folgendes Problem und keine Lösung dafür.
Ich habe ein Record wie folgt definiert:
Code: Alles auswählen
TStringVar = record
VarName: String;
Handle: LongWord;
Data: String;
end;
Code: Alles auswählen
procedure TfrmMain.ReadStringVar(var aVar: TStringVar);
var
tmp: array of char;
ads: longint;
begin
if aVar.Handle = 0 then
ads:= AdsSyncReadWriteReq(@AMS, ADSIGRP_SYM_HNDBYNAME, $0000, sizeof(aVar.Handle), @aVar.Handle, Length(aVar.VarName) + 1, @aVar.VarName[1])
else ads:= 0;
SetLength(tmp, 255);
if ads = 0 then
ads:= AdsSyncReadReq(@AMS, ADSIGRP_SYM_VALBYHND, aVar.Handle, Length(tmp), @tmp[0]);
if ads = 0 then aVar.Data:= PlcStringToString(tmp);
ShowMessage('in Procedure: ' + aVar.Data);
end;
Die Procedure wird in einer anderen Procedure aufgerufen:
Code: Alles auswählen
ReadStringVar(btn[0]);
ShowMessage('nach function: ' + btn[0].Data);
Wenn ich das ganze unter Win32 oder Win64 nutze geht alles einwandfrei. Kompiliere ich das ganze jedoch für WinCE (nutzer hier WinCE7 auf der SPS), dann passiert folgendes:
Das ShowMessage als letzte Anweisung in der ReadStringVar Procedure wird ausgeführt und zeigt den Inhalt der Variablen aus der SPS, danach kommt eine AccessViolation ohne das das ShowMessage nach dem ProcedureAufruf ausgelöst wird. Wie gesagt, das Problem besteht nur unter WinCE.
Hat hier jemand eine Idee wo der Fehler liegen könnte?
Liebe Grüße
PS: Lazarus Version ist 3.2, fpc ist 3.2.2
PPS: ich werde die Frage parallel auch im internationalen Forum stellen -> Thread