81
Generale / Re:Run Error (216) - General protection fault
« Ultimo post da DragoRosso il Marzo 28, 2024, 12:18:11 pm ».... ma mi sono ... stancato.Non prendertela, ci vuole molta pazienza per programmare.
E più "vai avanti" con la programmazione, che diventa più complessa, e più pazienza ci vuole.
Quando c'è un problema, o presunto tale, occorre munirsi di santa pazienza e pian piano procedere alla ricerca della causa, senza però mettere in atto cambiamenti radicali.
Alle volte, come hai fatto, però ricostruire una data "cosa" da zero è una soluzione efficacie.
Sotto Linux tieni presente, come accennavano altri partecipanti al topic, che maiuscolo / minuscolo vengono gestiti in maniera differenziata e che quando si fanno delle operazioni di "RIDENOMINAZIONE" si possono avere effetti collaterali non indifferenti (ma d'altronde anche in Windows se si rinominano file con nomi simili ... e si dimentica qualche vecchio nome in qualche uses ...).
Banalmente quando salvi una UNIT con la sua FORM, o li rinomini, una scrittura del nomefile con maiuscolo / minuscolo non corretto e non conforme a quanto inserito nelle uses (a mano) può generare problemi come quelli che hai verificato tu.
Ciò a maggior ragione se magari rimane qualche "rimasuglio" di file compilato (tipo .o oppure .ppu) che corrisponde a quanto erratamente ancora presente nelle uses.
Sinceramente non sò il compilatore di FPC come si comporta precisamente, ma tutti i compilatori usano dei meccanismi di "hashing"e di cache basati molto spesso sulle date di modifica dei file per velocizzare la compilazione, per cui quando si rinomina una unità potrebbe essere che rimangano i file vecchi compilati (che non vengono cancellati perche il sorgente non esiste più e quindi il compilatore non sà nemmeno che esiste il vecchio compilato) che se richiamati dal programma generano errori.
In pratica, quando tu inserisci il nome di una unit nelle USES, il compilatore cerca o il file .PAS o il file .PP o il file .PPU (poi ovviamente c'è anche tutta una serie di file collegati ...). Se non esistono file .PAS o .PP ma solo il .PPU e per il compilatore il file è valido, questo viene usato. E il .PPU senza .PAS (riferiti a file del tuo progetto, non a quelli di sistema o di altri di terze parti) è molto probabile che sia un residuo che ti darà quei problemi.
Spero di avere chiarito la probabile situazione in cui ti sei venuto a trovare (e non sei solo).