Eccoci alla quarte parte della serie di post dedicata al mondo COM: in questo post parleremo della vTable, e dei vari metodi cui accedere ai metodi esposti dai COM Component.

Qui i post precedenti

Componenti COM: Introduzione - parte 1 di 6
Componenti COM: Le interfacce - parte 2 di 6
Componenti COM: Interface Definition Language .....anche chiamato IDL - parte 3 di 6

Continueremo a utilizzare, per esporre alcuni dettagli, l'esempio esplicitato nei post precedenti e relativo alla calcolatrice e del COM Server dll che implementa la logica di funzionamento della stessa, esponendo i metodi Init e Somma.

Oss.: Tutto quanto detto varrà sostanzialmente anche se si intende utilizzare un COM Server di tipo exe.

vTable

Come visto nei post precedenti un COM server è in grado di ospitare, al suo interno, uno o più componenti COM, e la sua struttura interna segue una precisa specifica binaria che indica, tra l'altro, come devono essere poste le informazioni all'interno del relativo file (dll o exe che sia).

Questa specifica prevede anche la presenza all'interno del file compilato di una tabella chiamata vTable.

Il contenuto della vTable é creata partendo dalle interfacce di tutti i componenti COM ivi contenuti, e rappresenta l'associazione tra il nome del metodo pubblico e il codice binario che lo implementa e contenuto all'interno del file che repparesenta il COM Server.

In altri termini ogni riga contenuta nella vTable rappresente un metodo pubblico dell'intefaccia di un COM Component, e conterrà un valore che permetterà di accedere, all'interno del file COM Server stesso, all'ubicazione ove è presente il codice binario che implementa tale metodo.

Esempio (esemplificato) di struttura di vTable

Nome Metodo Lista Parametri Indirizzo Metodo all'interno del file
Init aParametro01, aParametro02 Indirizzo codice binario metodo Init
Somma  NN Indirizzo codice binario metodo Somma

Nel post precedente (Componenti COM: Le interfacce - parte 2 di 6) abbiamo introdotte la type library: qui dettaglieremo meglio come essa è costituita e i suoi utilizzi.

Interface Definition Language - IDL

Per descrivere quanto contenuto in una type library, e quindi tutte le informazioni descrittive legate ai componenti COM contenuti in un COM server, si usa il linguaggio IDL. In altri termini IDL è il "disassemblato" della type library, che normalmente è compilata insieme al COM Server o anche in un file separato, con estensione tlb.

Occorre dare uno sguardo, seppur sommario, a IDL, poichè non solo è un parte molto importante del mondo COM, ma anche perchè risulta essere interessante e poco oneroso carpirne la funzionalità generale.

Eccoci alla secondo parte della serie di post dedicati al fantastico e antico mondo degli oggetti COM.

Nel primo post (Componenti COM: Introduzione - parte 1 di 6) ho introdotto l'argomento e cercato di evidenziare i punti che hanno reso necessaria l'introduzione di questa tecnologia.

Da ora in poi inizieremo ad addentrarci nella parti più tecniche, e non disdegnerò di pubblicare parti di codice in VB6 per meglio chiarire i vari punti.

Sinora abbiamo parlato genericamente di oggetto o componente COM: è arrivato il momento di dettagliare meglio i termini utilizzati in quersto ambito.

 Come accennato un oggetto COM è costituito da una o più classi che forniscono funzionalità che possono essere utilizzate da altri codici "consumatori". Queste classi prendono il nome di componenti COM (o COM Component).

Il linguaggio di programmazione con cui sono state scritte queste classi possono essere differenti rispetto a quello che si vuole utilizzare per implementare il codice consumatore.

Poco tempo fa ho dovuto mettere mano a del codice scritto in VB6: un sistema legacy “in fase di dismissione” da diversi anni, ma ancora perfettamente funzionante nonchè ampiamente utilizzato.

Il problema da risolvere riguardava anche il sistemare alcune dipendenze (dll COM): per tale motivo ho dovuto riprendere in mano alcuni appunti che avevo scritto a suo tempo per districarmi nella materia.

Rileggendoli mi sono reso conto che non erano affatto male, e quindi ho deciso di sistemarli e condividerli con Voi.

Avvertimento iniziale

Questo articolo parla di cose veramente “vintage”, anche se ancora ampiamente supportate da tutti i moderni sistemi operativi e linguaggi di programmazione.

In tutto l'articolo userò spesso il tempo presente, anche più correttamente avrei dovuto usare ovunque il passato poichè il mondo COM/ActiveX fa oramai parte dell'archeologia informatica.

Parlerò anche di codice e IDE Visual Basic 6, anche in questo caso spesso usando il presente: anche qui sono ben conscio di parlare di un passato veramente …… tanto passato.

Ma... il blog è mio.... e a pensarci bene il tempo da usare per i post lo decido io......

Fine Avvertimento.

Inizio con il dire che esisteva un tempo in cui non era così facile scrivere delle librerie che, una volta compilate e distribuite, potevano essere utilizzate da altri pezzi di codice, questi ultimi magari scritti in un differente liguaggio.