Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: francesco - Novembre 07, 2023, 09:58:19 am

Titolo: unit che si rincorrono
Inserito da: francesco - Novembre 07, 2023, 09:58:19 am
invece che un componente ho messo le unit in pascal all'interno di un progetto, ma sembra che le unit si rincorrano, tanto da spostare la prima in fondo e ccosi' via...
l'errore mi si presenta in continuazione tanto che alla fine si ritorna ai posti di partenza e mi da' lo stesso errore.

echo.pas(6,3) Fatal: Impossibile trovare winsocs usato da echo.

non so' come fare , avete un idea... ?
Titolo: Re:unit che si rincorrono
Inserito da: DragoRosso - Novembre 07, 2023, 11:50:57 am
Non ho compreso chiaramente il problema.

Ci sono due "posti" dove le "Uses" possono essere inserite:

1) Sezione Interface;

2) Sezione Implementation.

Un riferimento incrociato non può essere inserito nelle Interface.

Se la Unit1 è presente nella Interface della Unit2, allora la Unit2 NON PUO' ESSERE PRESENTE nelle sezione Interface della Unit1 e viceversa ovviamente. Questo in linea generale ... se non ci sono errori anche se entrambe "si richiamano" allora vuol dire che il doppio USES non ha comunque senso perchè una delle due Unit non richiama l'altra.

In linea generale le unit (ossia i sorgenti Pascal) dovrebbero essere delle entità autonome, ossia svolgere delle elaborazioni autonome con riferimento ai framework di base (LCL, FPC, VCL, FMX, SYSTEM, UWP, RTL, etc ...) e a librerie di terze parti (o proprie). Ma ovviamente non ha alcun senso che una libreria di terze parti (o anche una propria se fatta bene) abbia dei riferimenti a qualcosa che è nel progetto che le usa ....

Normalmente si usa inserire nelle sezione Interface le Unit che hanno oggetti (classi, interfacce, record, etc ...) e variabili usate sempre nella stessa sezione Interface da altri oggetti che li dichiarano come membri propri. Devono essere inserite nella sezione Interface anche le Unit che dichiarano e istanziano oggetti con visibilità globale (molto spesso sono variabili semplici o record).

Nella sezione Implementation invece vengono inserite le Unit che vengono usate solo con visibilità locale.

Esempio di NON USO !!!:
Codice: [Seleziona]
 
Unit Unit1
Interface
Uses ......, Unit2, ....

type
  TProva1 = class(TProva2)
     SonoQui1: boolean;
end;

var Prova1: TProva1;
   
....
.....

****************************

Unit Unit2
Interface
Uses ......, Unit1, ....

type
  TProva2 = class(TProva1)
     SonoQui2: boolean;
end;

var Prova2: TProva2;
   
....
.....
Questo è un esempio tipico (che nessuno si sogna neanche lontanamente di applicare) in cui ci sono dei riferimenti incrociati dichiarati in due Unit. La classe TProva1 e TProva2 sono dichiarate come derivate una dall'altra. Ciò non è possibile (ma non lo sarebbe neanche se fossero nella stessa Unit) oltre che per il riferimento incrociato anche per ulteriori motivi .....

I riferimenti incrociati devono essere sbrogliati in più Unit (o più oggetti) e ciascuna Unit dovrebbe essere tipicamente autonoma.

Io normalmente uso creare una Unit solo ed esclusivamente contenente le definizioni di qualunque oggetto ad uso di tutte le altri classi. Tutte le dichiarazioni in questa Unit DIPENDONO solo ed esclusivamente dai framework di base, da librerie di terze parti, da wrapper o da librerie personali.

Questa Unit potrà essere richiamata ove serve o nella Interface o nella Implementation in quanto non contiene riferimenti diretti al progetto (è il progetto che usa le definizioni di questa Unit).

Spero che sia stato utile.
Titolo: Re:unit che si rincorrono
Inserito da: francesco - Novembre 07, 2023, 12:57:57 pm
Le USES sono tutte dichiarate sotto interface..... :-X :-X
Titolo: Re:unit che si rincorrono
Inserito da: DragoRosso - Novembre 07, 2023, 01:59:55 pm
echo.pas(6,3) Fatal: Impossibile trovare winsocs usato da echo.

L'errore che riporti corrisponde alla impossibilità per il compilatore di trovare l'unità "winsocs" (o sorgente in .pas o già compilata) nei percorsi definiti.

A parte che forse dovrebbe essere WINSOCK, non winsocs, l'unità ECHO.pas è scritta per Lazarus ?

Titolo: Re:unit che si rincorrono
Inserito da: francesco - Novembre 07, 2023, 05:02:15 pm
si per lazarus e anche la parte per win e' scritta in pascal. :-\ :-\
Titolo: Re:unit che si rincorrono
Inserito da: DragoRosso - Novembre 07, 2023, 05:33:04 pm
si per lazarus e anche la parte per win e' scritta in pascal. :-\ :-\
Ma sei sotto Windows o Linux ?
Titolo: Re:unit che si rincorrono
Inserito da: francesco - Novembre 07, 2023, 06:55:39 pm
sono sotto linux ma una unit si puo'usare per interfacciarci con win. :-X :-X
Titolo: Re:unit che si rincorrono
Inserito da: francesco - Novembre 07, 2023, 08:30:22 pm
le unit fanno parte del pacchetto nsinapse, ho usato il formato in Pascal, per poter intervenire nelle stesse agiungendoci qualcosa di mio es. un gestore degli errori a runtime....
Titolo: Re:unit che si rincorrono
Inserito da: francesco - Novembre 07, 2023, 08:36:09 pm
A proposito le uses sono tutte in lettere minuscole, ho controllato. :'( :'(
Titolo: Re:unit che si rincorrono
Inserito da: DragoRosso - Novembre 07, 2023, 09:24:23 pm
A proposito le uses sono tutte in lettere minuscole, ho controllato. :'( :'(

Questo vale solo x Linux, dove il nome del file deve essere "preciso". Comunque se sbagli nome in compilazione ti dice che non trova il file.

sono sotto linux ma una unit si puo'usare per interfacciarci con win. :-X :-X

No, non è possibile usare Unit "platform dependent" in altri SO. Non puoi usare una Unit di Linux con Windows o viceversa.

le unit fanno parte del pacchetto nsinapse, ho usato il formato in Pascal, per poter intervenire nelle stesse agiungendoci qualcosa di mio es. un gestore degli errori a runtime....

Synapse non lo uso, ma sò che è abbastanza delicato con le versioni. Ho "paura" che se non hai la versione abbinata di Synapse con il tuo Lazarus potresti avere dei problemi.

Come ti ho già riportato, una buona parte di pacchetti di terze parti funzionano solo con Lazarus dalla versione 2 in poi.

Magari c'è qualcuno della comunità che ti può aiutare in maniera più mirata.

Ciao
Titolo: Re:unit che si rincorrono
Inserito da: xinyiman - Novembre 08, 2023, 08:31:24 am
DragoRosso ha già fatto tutte le osservazioni che si potevano fare senza avere un sorgente da analizzare.
Titolo: Re:unit che si rincorrono
Inserito da: francesco - Novembre 08, 2023, 10:53:03 am
ok mi ha dato tutte le delucidazioni. ma tolto synapse adesso mi da quest'errrore:

/usr/bin/ld.bfd: impossibile trovare -lmsvcrt.dll

che precedentemente non avevo....
grazie.
Titolo: Re:unit che si rincorrono
Inserito da: DragoRosso - Novembre 08, 2023, 03:28:41 pm
Questo lo avevi già segnalato in un altro Thread: https://www.lazaruspascal.it/index.php?topic=2809.msg19160#msg19160 (https://www.lazaruspascal.it/index.php?topic=2809.msg19160#msg19160)

Non possiamo aiutarti se non ci dai qualche spiegazione in più o non ci dai qualcosa da "analizzare".

Non è che stai "misciando" codice Delphi Windows con codice Lazarus Linux ?
Titolo: Re:unit che si rincorrono
Inserito da: francesco - Novembre 08, 2023, 05:24:20 pm
In verita' non so' ci guardero subito in tutte le unit.
grazie