Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: fr33d0m - Ottobre 22, 2013, 04:17:59 pm

Titolo: Eccezione 'External: SIGSEGV'
Inserito da: fr33d0m - Ottobre 22, 2013, 04:17:59 pm
Ho convertito una vecchia applicazione D4 in Lazarus ma quando la lancio mi solleva l'eccezione in oggetto e poi appare la finestra assembler con queste linee:
Codice: [Seleziona]
ntdll!LdrDisableThreadCalloutsForDll 
7C91E47C 8b4c2404                 mov    0x4(%esp),%ecx
7C91E480 8b1c24                   mov    (%esp),%ebx   *** ERRORE ***
7C91E483 51                       push   %ecx
7C91E484 53                       push   %ebx
7C91E485 e8e6c40100               call   0x7c93a970 <towlower+298>
7C91E48A 0ac0                     or     %al,%al
7C91E48C 740c                     je     0x7c91e49a <ntdll!LdrDisableThreadCalloutsForDll+30>
riferito al seguente codice contenuto nel file "control.inc":
Codice: [Seleziona]
procedure TControl.ReadState(Reader: TReader);
begin
  Include(FControlFlags, cfLoading);
  DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TControl.ReadState'){$ENDIF};
  try
    Include(FControlState, csReadingState);
    inherited ReadState(Reader); { *** ERRORE *** }
  finally
    Exclude(FControlState, csReadingState);
    EnableAutoSizing{$IFDEF DebugDisableAutoSizing}('TControl.ReadState'){$ENDIF};
  end;
end;
Ho provato a modificare il $MODE mettendo OBJFPC, ho corretto gli errori ma l'eccezione viene sollevata ugualmente.
Ho usato il debugger e passo-passo sono arrivato fino alla funzione che ritorna l'errore durante la creazione della Form principale:
E' la "Reader.ReadRootComponent(Instance);" nella unit LResources.
Anche facendo partire l'eseguibile da filesystem la sistuazione non cambia.
Ho cercato in giro ma non sono riuscito a trovare una soluzione.
Qualcuno ha qualche idea?

P.S. Utilizzo Lazarus 1.0.08 su XP32
Titolo: Re:Eccezione 'External: SIGSEGV'
Inserito da: Stilgar - Ottobre 23, 2013, 05:19:49 pm
Sicuramente l'hai già controllato...
i dfm sono stati convertiti correttamente dal wizard?

Stilgar
Titolo: Re:Eccezione 'External: SIGSEGV'
Inserito da: nomorelogic - Ottobre 23, 2013, 07:41:10 pm
Prova ad aprire lfm e dfm in modo testo e osserva se ci sono differenze nelle sintassi (e se hai qualche dubbio fai un form con lazarus e guarda il file lfm creato in originale).

Probabilmente la lettura del componente fallisce per qualcosa nella dichiarazione
Titolo: Re:Eccezione 'External: SIGSEGV'
Inserito da: fr33d0m - Ottobre 24, 2013, 02:57:36 pm
Sicuramente l'hai già controllato...
i dfm sono stati convertiti correttamente dal wizard?
Bella domanda...

Prova ad aprire lfm e dfm in modo testo e osserva se ci sono differenze nelle sintassi (e se hai qualche dubbio fai un form con lazarus e guarda il file lfm creato in originale).
Hanno diverse differenze nella sintassi; alcune proprietà mancano perché non riconosciute, alcune sono state aggiunte, altre sono state riscritte con sintassi leggermente differente.
Ma se la form viene visualizzata correttamente nell'ide non significa che è sintatticamente scritta giusta?
Dovrei provare a crearne una nuova inserendo uno ad uno tutti i componenti, dargli tutte le proprietà giuste, creare tutti gli eventi... e poi sostituire il file all'originale. Che sbattimento però!  :(
Titolo: Re:Eccezione 'External: SIGSEGV'
Inserito da: nomorelogic - Ottobre 24, 2013, 04:25:44 pm
Ma se la form viene visualizzata correttamente nell'ide non significa che è sintatticamente scritta giusta?

magari nel disegno della form le proprietà sconosciute vengono semplicemente ignorate.
Titolo: Re:Eccezione 'External: SIGSEGV'
Inserito da: Stilgar - Ottobre 24, 2013, 06:52:13 pm
fr33d0m, il problema sarebbe se il dfm fosse in formato binario ... quello sarebbe un vero e proprio sbattimento :D

Stilgar ;)