Newsgroup: it.comp.lang.c++
Titolo: Cosa sono i controlli ACTIVEX?

Il titolo del messaggio è abbastanza esplicito.
All'inizio credevo che i controlli ActiveX servissero solo per
Internet (pensavo fossero qualcosa tipo applet) ma ora penso di aver
capito che sono tutt'altro e che possono diventare utili anche nella
"normale programmazione".
Qualcuno può spiegarmi cosa sono e a cosa servono esattamente?
GRAZIE.

Qualcuno può spiegarmi cosa sono e a cosa servono esattamente?
Dave Chappell ha fatto un ottimo lavoro nel suo testo su Active/X,
""Understanding ActiveX and OLE, a guide for developers and managers"
(disponibile anche in Italiano per i tipi di Mondadori Informatica, ma
non so com'é la traduzione).  Io ho un breve survey (in inglese) su
temi tecnici "circonvicini" a 
http://magenta.com/~alex/ComEtc/briefest.htm
,
ma non tratta di ActiveX "vero e proprio", ma piú che altro di COM (la
tecnologia su cui ActiveX, e tante altre cose come Automation, Shell,
Scripting, ecc ecc, si basano).
Un controllo ActiveX é, secondo le specifiche attuali, un oggetto COM
che soddisfa a certe convenzioni -- la principale, fra quelle d'obbligo,
é che sappia "autoregistrarsi" in certi modi; ci sono poi dozzine di
interfacce piú o meno facoltative, ma normalmente implementate e/o
usate da quegli oggetti COM che normalmente si chiamano "ActiveX"
piuttosto che solo "COM" (o Automation, ecc ecc).  Quel che puó fare
con queste interfacce, e con qualsiasi altra "custom" che esso esponga,
é "un poco di tutto"... normalmente (ma non sempre) un controllo
ActiveX ha un "aspetto visuale", anzi, almeno due: uno usabile "a
tempo di progettazione", cioé dal programmatore o disegnatore che
sta mettendo insieme con strumenti piú o meno visuali una pagina,
un dialogo, una view, o quant'altro; uno, l'aspetto "a tempo di
esecuzione", quello con cui appare al fruitore finale di quella
applicazione, sito Web, o quant'altro (naturalmente puó anche essere
"invisibile" in una o entrambe le situazioni).  Se é visibile, e attivato,
reagisce anche, normalmente, in qualche modo, agli input del
fruitore finale in questione -- modificando il proprio stato, facendo
delle azioni, lanciando degli "eventi" al "contenitore" che lo ospita.
Il "contenitore" che ospita controlli ActiveX e' l'applicazione, o dialogo,
o pagina, ecc ecc, che, appunto, li "contiene", e ha normalmente anche
uno o piú linguaggi a disposizione per piazzarli/mostrarli/nasconderli,
leggerne e scriverne le proprietá, rispondere se del caso ai loro eventi.
Ad esempio, se il contenitore é una pagina Dynamic-HTML, i vari
linguaggi sono HTML 4.0, CSS 1.0, Javascript, VBscript, altri eventuali
linguaggi di scripting, piú quelli arbitrari in cui sono realizzati eventuali
altri controlli ActiveX che il contenitore puó connettere fra loro.
A un altro estremo, il contenitore puó essere un dialogo realizzato
in C++ con MFC (che sa, appunto, implementare contenitori di
ActiveX) e l'unico linguaggio a disposizione il C++ (anche se oggi
non é difficile aggiungervi i vari linguaggi di scripting, grazie tra
l'altro proprio al controllo ActiveX Microsoft Scripting Control!-).
Le "proprietá" di un controllo vanno da quelle visuali piú "ovvie", tipo
dimensione, posizione, font, ecc; a quelle tutt'altro che ovvie, ad
esempio il MSC testé menzionato ha una proprietá "language", che
é una stringa, settando la quale il contenitore decide quale linguaggio
di scripting dovrá essere supportato da questa istanza di MSC.
I controlli ActiveX possono essere realizzati in qualsiasi linguaggio
(se il suo compilatore/interprete/ecc supporta lo standard ActiveX).
Il Visual C++ mette a disposizione sia MFC sia ATL per questo
compito, ma si possono fare anche in Visual Basic, in Dynamic
HTML + un linguaggio di scripting ("scriptlets"), in Delphi, in Java
(con la macchina virtuale Java della Microsoft, praticamente qualsiasi
classe Java, e sicuramente qualsiasi Javabean, puó essere visto
come controllo ActiveX).  Dovrebbe essere "trasparente", sia per
chi realizza il contenitore sia per l'utente finale, come siano stati
scritti, perché si tratta di una tecnologia "per componenti" che
definisce standard di interoperabilitá indipendenti dal linguaggio
(salvo naturalmente che alcuni linguaggi faranno codice piú svelto,
o piú piccolo, o avranno bisogno di diverse DLL a runtime per far
girare i controlli che implementano, eccetera).
Da quasi due anni le specifiche di ActiveX sono nelle mani dell'OMG
(Object Management Group), cui Microsoft ha ceduto il trademark e
il diritto di controllare gli standard (ma, che io sappia, non sono ancora
usciti dal comitato standard diversi da quelli che Microsoft aveva fatto
nel '96 -- d'altronde i comitati di standardizzazione funzionano cosí,
per lo standard C++ ci sono voluti oltre 10 anni, non a caso Sun non
vuole procedere a "tempi di comitato" sulla standardizzazione del
linguaggio Java...!-).
OK, é questa un'introduzione molto sommaria e superficiale, ma spero
che possa servire a far partire la discussione...!
Alex