* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 15, 2024, 01:14:10 pm

Inserisci il nome utente, la password e la durata della sessione.

564 Visitatori, 1 Utente
 

Autore Topic: FPC Corba  (Letto 979 volte)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1272
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
FPC Corba
« il: Settembre 26, 2023, 02:38:40 pm »
Inizio un nuovo Post per rientrare dall'OT di questo https://www.lazaruspascal.it/index.php?topic=2559.msg18995#msg18995

@Nomorelogic, ma sai che non ho compreso appieno quale sia la differenza tra l'implementazione (perchè la definzione è identica) tra CORBA e le Interface classiche (diciamo meglio quelle derivate da IInterface).

Lasciamo un attimo perdere il reference counting, dove nell'articolo indicato viene predicato il mancato rispetto del reference counting stesso anche quando questo non viene applicato (si parla dell'eventuale AV legata ad una generica esecuzione di riferimenti di Interfacce non "ìstanziate").

La differenza dove sta? Mi pare che a parte il reference counting tutto sia identico a quello che li viene indicato come "COM". L'interfaccia espone dei metodi comuni e COM definisce un metodo "universale" per conoscerle (Query).

Corba ? Da quel che viene descritto sembra sia quasi tutto a "compiled time", il che non mi sembra una grande rivoluzione ne progresso.

Ciò probabilmente è legato alla mancanza di supporto a RTL / RTTI, ma ripeto che questo sembrerebbe più un escamotage che una vera rivoluzione.

Che poi ciò si sia affermato in FPC, questo ci stà anche perchè molte altre strade non ne esistono, mantenendosi approssimativamente sulla stessa via.

Ne esco con certezze che vacillano ....
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2875
  • Karma: +20/-4
Re:FPC Corba
« Risposta #1 il: Settembre 26, 2023, 04:06:29 pm »
"CORBA" è un nome che ricorda una vecchia tecnologia ma le interfacce - oggi - non si riferiscono a questa vecchia tecnologia
diciamo che è un nome preso in un momento storico ma non ha più quel significato

le interfacce CORBA in FPC non sono una rivoluzione ma sono l'implementazione di un concetto della programmazione ad oggetti già presente in altri linguaggi
come ha detto mimmo nell'altro post sono interfacce "alla-java" ma in realtà troviamo la stessa implementazione anche in altri linguaggi
fpc si è adeguato per permettere questo tipo di programmazione

rimando a questo link
https://wiki.lazarus.freepascal.org/Interfaces
dove nella sezione "Detailed introduction text" troviamo

Citazione
You should understand, that there are two kinds of interfaces. Pascal interfaces implement them both at the same time and sometimes it causes some confusion. 1) Interfaces as tool to implement multiple inheritance, as they work in some other languages, like Java 2) OLE/COM interfaces as Windows-specific language-independent way to implement OOP. So, first of all you should realize, which of this two cases is yours.

Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1272
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:FPC Corba
« Risposta #2 il: Settembre 26, 2023, 05:17:27 pm »
"CORBA" è un nome che ricorda una vecchia tecnologia ma le interfacce - oggi - non si riferiscono a questa vecchia tecnologia
diciamo che è un nome preso in un momento storico ma non ha più quel significato
Questo è sempre stato chiaro e nessuno lo ha mai messo in discussione, il rimando che ho fatto riguardava solo il richiamo di memoria (non informatica, ma di cervello  :P... niente a che fare con l'abbinamento tra i due.
le interfacce CORBA in FPC non sono una rivoluzione ma sono l'implementazione di un concetto della programmazione ad oggetti già presente in altri linguaggi
come ha detto mimmo nell'altro post sono interfacce "alla-java" ma in realtà troviamo la stessa implementazione anche in altri linguaggi
fpc si è adeguato per permettere questo tipo di programmazione
rimando a questo link
https://wiki.lazarus.freepascal.org/Interfaces
dove nella sezione "Detailed introduction text" troviamo
Citazione
You should understand, that there are two kinds of interfaces. Pascal interfaces implement them both at the same time and sometimes it causes some confusion. 1) Interfaces as tool to implement multiple inheritance, as they work in some other languages, like Java 2) OLE/COM interfaces as Windows-specific language-independent way to implement OOP. So, first of all you should realize, which of this two cases is yours.
Non esiste alcuna spiegazione sulla differenza, la definizione è la stessa. Non viene in alcun modo spiegato quale è la differenza di implementazione, se non tra le righe capendo che come ho riferito sia fatto quasi tutto "magicamente" a compiler time. Dire che è tipo Java non vuole dire nulla. Tutte le Interfacce sono comuni in tutti i linguaggi compreso Delphi, FPC, etc...
E dire che è COM compatibile vuole dire solo che ha un metodo predefinito, cioè la "QueryInterface" tramite cui viene ritornato il "puntatore al metodo". Non sò neanche se sono obbligatorie le "_AddRef" e "_ReleaseRef".

Quindi, ancora non capisco la differenza, se non che FPC ha il supporto solo a compiled time (praticamente) e non a run time ...

Tra l'altro, giusto per terminare in bellezza, le implementazioni che ho trovato in FPC (nei sorgenti di FPC e Lazarus) hanno tutte come riferimento la chiamata a QueryInterface per la verifica dell'interfaccia (il famoso Supports(....) ).

Poi magari mi sbaglio, anzi sicuramente mi sbaglio, ma non mi pare ci sia alcuna differenza tra COM e non COM, anzi ....

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Mimmo

  • Jr. Member
  • **
  • Post: 76
  • Karma: +3/-0
Re:FPC Corba
« Risposta #3 il: Settembre 26, 2023, 06:31:47 pm »
Magari a livello implementativo le differenze sono minime, qualche if qua e la :-)
A livello logico le differenze però ci sono. L'interfaccia "corba" di fpc è l'interfaccia "normale", nessun free automatico, nessun guid, nessun metodo AddRef da compilare. E' l'escamotage che, java prima (da qui "alla-java") e c# dopo, si sono inventati per supportare l'ereditarietà multipla in oop.
Senza fare guerre di religione, io penso che se uno ha bisogno delle interfacce oop possa allegramente e felicemente utilizzare l'implementazione data da fpc con l'opzione infelicemente chiamata corba perchè con quella puoi scrivere del codice più semplice e leggibile. Poi liberi tutti, ad esempio per mantenere la compatibilità con Delphi, di lavorare con le interfacce ole/com.
Io ricordo che anche taroccando il contatore qualche problema lo avevamo avuto col nostro ipercubo però non ricordo i dettagli.. se trovo il tempo magari faccio una verifica.




DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1272
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:FPC Corba
« Risposta #4 il: Settembre 26, 2023, 07:57:10 pm »
Magari a livello implementativo le differenze sono minime, qualche if qua e la :-)
A livello logico le differenze però ci sono. L'interfaccia "corba" di fpc è l'interfaccia "normale", nessun free automatico, nessun guid, nessun metodo AddRef da compilare. E' l'escamotage che, java prima (da qui "alla-java") e c# dopo, si sono inventati per supportare l'ereditarietà multipla in oop.
Senza fare guerre di religione, io penso che se uno ha bisogno delle interfacce oop possa allegramente e felicemente utilizzare l'implementazione data da fpc con l'opzione infelicemente chiamata corba perchè con quella puoi scrivere del codice più semplice e leggibile. Poi liberi tutti, ad esempio per mantenere la compatibilità con Delphi, di lavorare con le interfacce ole/com.
Io ricordo che anche taroccando il contatore qualche problema lo avevamo avuto col nostro ipercubo però non ricordo i dettagli.. se trovo il tempo magari faccio una verifica.
Guarda che Delphi supporta la definizione di interfaccia senza GUID :o

E  serve la QueryInterface (e quindi le GUID) se si hanno interfacce multiple derivate nella classe istanziata.
Inoltre la GUID lo dichiari, come ho indicato se devi a runtime effettuare delle operazioni "virtuali" come IS, AS, Supports, ... e quindi anche le QueryInterface deve esserci.

E se nei casi indicati la GUID serve e anche la "QueryInterface" non vedo ripeto alcuna differenza.

Quindi non vedo alcuna differenza. E le interfacce "multiple" sono una caratteristica tipica della OOP, e servono proprio a consentire di fatto l'ereditarietà multipla (come ho già accennato, non è proprio così ma ci si avvicina) che non è consentita attraverso le sole Classi. Penso che esista da sempre.
E per implementarle, fino a prova contraria che vorrei capire, deve esserci la GUID e la QueryInterface.

La mia non è una polemica, vorrei solo capire se effettivamente c'è una strada diversa come dite, ma non riesco a comprenderla. Secondo me parliamo della stessa cosa.

Poi non sono andato nei meandri del codice sorgente ne in FPC ne in Delphi per vedere se a livello assembler fanno qualcosa o magicamente il compilatore si inventa il coniglio nel cappello ... ma non mi interessa questo.

Secondo me la cosa interessante è: si può fare quello sotto scritto senza GUID, senza QueryInterface, senza Addref, senza ReleaseRef ?
Sia in Delphi che in Lazarus ? E con cosa obbligatorio ?
Devo modificare qualcosa per avvicinarci a quello che ho scritto ? Devo cambiare nomi di metodi ? Devo aggiungere qualcosa alle procedure ?

Se no parliamo di aria fritta.

Sono le prove che farò a livello base, cercando di non usare funzioni "speciali",  di cui però mi aspetto già le risposte.

Esempio scritto così come me lo immagino (lasciamo perdere se è utile o no):
Codice: [Seleziona]
type
  IStampaLaser = interface
    procedure Stampa;
  end;

  IStampaInkjet = interface
    procedure Stampa;
  end;

  TProvadiStampa = Class(TObject, IStampaLaser, IStampaInkJet)
     public
         procedure Stampa;
   end;

Implementation

procedure TProvadiStampa.Stampa;
begin
   ShowMessage('Sto stampando con che interfaccia ????');
end;
Appena ho testato posto qui i risultati. Serve anche a me per capire se ci sono altre strade (quella pura Pascal come dite), perchè sino ad ora ho usato la strada classica (quella che viene definita COM) e mi farebbe piacere se ci fosse un altro modo ...

Ciao
« Ultima modifica: Settembre 26, 2023, 09:34:01 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1272
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:FPC Corba
« Risposta #5 il: Settembre 27, 2023, 12:00:32 pm »
Ho testato le interfacce con diversi metodi (uguali, diversi, con parametri, in overload) e diverse classi sia con {$Intrefaces corba} sia normali. Con GUID e senza GUID, con interfacce multiple o singole. Il tutto in x64.

Il comportamento è identico sia in Delphi che in Lazarus. Mi aspettavo una cosa simile, anche se sono rammaricato perchè speravo ci fosse qualcosa di nuovo.

Cosa cambia tra i due ambienti:

1) RTL / RTTI, con Delphi si riescono ad ottenere più informazioni. Ma è sicuramente la mia scarsa conoscenza delle RTL / RTTI di FPC che influisce.

2) Debugging: in Lazarus non sono riuscito a trovare alcun modo per debuggare le "interfacce".

3) Quando si usa lo "switch corba", le Interfacce, che anche se sono di tipo "interface" normalmente venivano identificate con la GUID e si "potevano passare come parametro", rimangono di tipo "interface" ma senza possibilità di essere passate come parametro anche se hanno la GUID (anche qui probabilmente una mia lacuna).
Ciò non cambia praticamente nulla (almeno normalmente) per quello che riguarda il funzionamento.

Tutti i metodi QueryInterface, _AddeRef e _ReleaseRef sono sempre implementati, e l'incremento o il decremento sono effettuati in maniera "aotmica" quindi tendenzialmente è ThreadSafe.

Con lo "switch corba" il compilatore "elimina" le chiamate ad _AddRef e _ReleaseRef (in quest'ultima verrebbe effettuata la "distruzione" del riferimento).

Tutto il resto rimane immutato. Ho provato a fare dei test in termini di operazioni e analisi delle tempistiche di esecuzione ed è necessario effettuare 1 MILIONE di operazioni sulla interfaccia per avere meno di 1 MILLISECONDO di differenza complessivi tra "corba" e "non corba", quindi non ritengo che nelle operazioni comuni ciò sia impattante.

Spulciando i sorgenti FPC non mi pare si usi "corba" ...

Ciao
« Ultima modifica: Settembre 27, 2023, 12:03:13 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2875
  • Karma: +20/-4
Re:FPC Corba
« Risposta #6 il: Settembre 27, 2023, 12:34:28 pm »
la differenza è puramente di concetto:
le interfacce COM includono ereditarietà multipla + reference counting, le interfacce "normali" (che fpc chiama corba) solo ereditarietà multipla

mentre l'ereditarietà multipla è un concetto OOP di design e non ha nessun effetto a runtime, il reference counting non è propriamente un concetto ma ha invece effetto a runtime in quanto cambia lo stato della macchina (liberando automaticamente le risorse)

a livello teorico si tratta di 2 comportamenti eterogenei impacchettati insieme quando - i teorizzatori dell'OOP sostengono -  non dovrebbero esserlo (e questa credo sia una teorizzazione corretta)

da quì la volontà di implementare le interfacce solo come concetto OOP di ereditarietà multipla eliminando il reference counting
(il GUI è presente nelle 2 implementazioni in quanto fa parte del concetto di ereditarietà multipla)

quindi - nel campo dell'ereditarietà - non c'è alcuna differenza tra le 2 implementazioni
col debugger infatti puoi solo vedere come funziona il reference counting quando usi le COM (RTL/RTTI non fanno testo se non quando usano questo meccanismo)

nomorelogic
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1272
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:FPC Corba
« Risposta #7 il: Settembre 27, 2023, 02:31:53 pm »
Ti dò ragione concettuale, ma non pratica   :P

Il reference counting (o meglio l'effetto del) può essere annullato effettuando l'override delle due funzione e ponendole a -1 costante.

Il fatto che ci sia il compilatore che magicamente fà sparire la chiamata mi pare una "cavolata". Se doveva essere fatto ci doveva essere una implementazione senza i metodi .. tra l'altro le interfacce consentono proprio di implementare solo i metodi necessari, e non una valanga di roba che non serve a nulla (eredita da classi antiche).

Il compilatore dovrebbe ottimizzare, mica immischiarsi a togliere metodi (se non per pura ottimizzazione) ....

Comunque l'importante è combinare come si dice. Ora mi è chiara la cosa, prima era vaga e mi rodeva ...

Alla prossima, CIAOOO  :D :D :D
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2875
  • Karma: +20/-4
Re:FPC Corba
« Risposta #8 il: Settembre 27, 2023, 05:57:06 pm »
visto che ci siamo ho cercato di studiare un po' di più la cosa e mi sono chiesto il perché della rimozione di  _AddRef e _ReleaseRef

la risposta, dopo molto girovagare l'ho trovata nell'unico posto dove doveva essere: nella documentazione ufficiale :)
https://www.freepascal.org/docs-html/prog/progsu37.html#x44-430001.2.37

in pratica le interfacce COM differiscono dalle CORBA anche per l'attribuzione del parent
nel caso di COM il parent delle interfacce è IUnknown (tramite TInterfacedObject che deve essere nella dichiarazione della classe, che si occupa del reference counting)
nel caso CORBA, il parent non è necessario ma, per mantenere la compatibilità tra il cambio di direttive, è possibile usare comunque TInterfacedObject come parent della classe finale (ma le chiamate ad _AddRef e _ReleaseRef verranno eliminate)

chiaramente ho fatto qualche prova
usando le interfacce CORBA, la dichiarazione "TMyClass1 = class (IInterfacciaCORBA)" è valida
Codice: [Seleziona]
unit Unit1;

{$mode ObjFPC}{$H+}
{$interfaces corba}

interface

uses
  Classes, SysUtils;


type
  IInterfacciaCORBA = interface
    procedure DoThis (value: integer);
  end;

  { TMyClass1 }

  TMyClass1 = class (IInterfacciaCORBA)
     procedure DoThis (value: integer);
   end;

implementation

{ TMyClass1 }

procedure TMyClass1.DoThis(value: integer);
begin

end;

end.

usando invece le interfacce COM, sono costretto a dichiarare la classe come "TMyClass2 = class (TInterfacedObject, IInterfacciaCOM) "
eliminando "TInterfacedObject" dalla dichiarazione si otterrà l'errore di compilazione:
unit2.pas(17,15) Error: No matching implementation for interface method "QueryInterface(constref TGuid;out <Formal type>):System.LongInt; CDecl;" found

Codice: [Seleziona]
unit Unit2;

{$mode ObjFPC}{$H+}

interface

uses
  Classes, SysUtils;

type
  IInterfacciaCOM = interface
    procedure DoThis (value: integer);
  end;

  { TMyClass2 }

  TMyClass2 = class (TInterfacedObject, IInterfacciaCOM)
     procedure DoThis (value: integer);
   end;

implementation

{ TMyClass2 }

procedure TMyClass2.DoThis(value: integer);
begin

end;

end.


Edit:
ho visto che anche il GUID nelle CORBA è facoltativo
in quel caso spetta al programmatore evitare conflitti nel nominare le interfacce

Edit 2:
ora che è chiarito l'arcano della rimozione dei metodi _AddRef e _ReleaseRef
ha anche più senso l'implementazione delle interfacce come semplice concetto di ereditarietà multipla:
usando CORBA ed evitando TInterfacedObject si usa in modo pulito l'ereditarietà ma si può sempre ricorrere alla compatibilità se necessario
chapeau :)


nomorelogic
« Ultima modifica: Settembre 27, 2023, 06:14:30 pm da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1272
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:FPC Corba
« Risposta #9 il: Settembre 27, 2023, 07:07:09 pm »
Ti sbagli, i metodi ci sono ancora, prova a vedere e la classe TMy_Class possiede _Addref e tutto il resto ...
Una classe, anche se non la specifichi, deriva comunque da TObject che ha quei metodi.

Ciao
« Ultima modifica: Settembre 27, 2023, 07:08:59 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2875
  • Karma: +20/-4
Re:FPC Corba
« Risposta #10 il: Settembre 27, 2023, 07:27:15 pm »
come fanno ad esserci se sono in TInterfacedObject?  :o

Edit:
scusa puoi dirmi dove verifichi la presenza di _Addref?
Col debugger mi sa che non trovo il modo di fare l'inspect...
« Ultima modifica: Settembre 27, 2023, 07:35:38 pm da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2875
  • Karma: +20/-4
Re:FPC Corba
« Risposta #11 il: Settembre 27, 2023, 08:00:37 pm »
sono riuscito a controllare con l'object inspector
la pratica a me combacia con la teoria: con le interfacce CORBA i metodi _AddRef e compagnia non ci sono  :)


Imagination is more important than knowledge (A.Einstein)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2875
  • Karma: +20/-4
Re:FPC Corba
« Risposta #12 il: Settembre 27, 2023, 08:04:14 pm »
Una classe, anche se non la specifichi, deriva comunque da TObject che ha quei metodi.

_AddRef & soci non sono in TObject...
Forse stai verificando su Delphi?
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1272
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:FPC Corba
« Risposta #13 il: Settembre 27, 2023, 08:07:07 pm »
sono riuscito a controllare con l'object inspector
la pratica a me combacia con la teoria: con le interfacce CORBA i metodi _AddRef e compagnia non ci sono  :)

Io no, a me Object Inspector non funziona con le interfacce, ne le watch.

_AddRef & soci non sono in TObject...
Forse stai verificando su Delphi?

In mancanza di meglio faccio dal codice ....  :o
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1272
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:FPC Corba
« Risposta #14 il: Settembre 27, 2023, 08:10:36 pm »
Spe' .... c'è una IInterface rimasta nelle dichiarazioni dei metodi ... forse è quello ....



EDIT: NO, RIMANGO LO STESSO ....
« Ultima modifica: Settembre 27, 2023, 08:12:09 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18817
  • Topic in totale: 2240
  • Online Today: 595
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 1
Guests: 564
Total: 565

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.