Access Violation beim Verlassen der Procedure

Antworten
TheRealHades
Beiträge: 12
Registriert: So 10. Feb 2013, 13:01
OS, Lazarus, FPC: Windows 10 20H2 (L 2.2.2 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Ottendorf-Okrilla

Access Violation beim Verlassen der Procedure

Beitrag von TheRealHades »

Hallo,

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;
und eine Procedure die StringVariablen aus einer SPS lesen soll:

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

Antworten