Come creare applicazioni che possono fornire servizi ad altre applicazioni tramite le OLE, creando estensioni in formato DLL

In VB 4.0 è disponibile nel menù file una voce con la quale è possibile creare DLL.
Le DLL create con VB 4.0 non sono delle consuete DLL che poi si possono utilizzare con le
normali dichiarazioni all'interno di un modulo, sono in realtà delle DLL Server-OLE.
Un Server-OLE non è altro che una applicazione che mette a disposizione ad altri applicativi 
degli oggetti con relativi metodi e proprietà, in pratica delle vere e proprie estensioni per più
applicativi. In questo articolo si potrà vedere come realizzare una semplicissima applicazione
Server-OLE che visualizzerà un form di informazioni, con lo stesso procedimento è possibile
creare applicazioni più complesse. In una qualsiasi applicazione VB il componente di avvio è
solitamente un Form, in un Server-OLE invece si deve necessariamente partire da una procedura di nome Main. Questa procedura deve risiedere in un modulo standard e non è
necessario che sia presente del codice. La procedura Main deve comunque esistere e deve
essere del tipo Sub, quindi si dovrà inserire nel progetto un modulo standard tramite il menù
Inserisci e creare una procedura Main.

Sub Main()
End Sub


Visto che l'OLE-Server che si intende creare dovrà visualizzare sul desktop una finestra
di informazioni si procederà ad inserire nel progetto un form. Alla proprietà Name del form
si assegnerà il nome frmInfo, si imposterà BorderStyle a 3 - Fixed Dialog e si darà un titolo
al form attraverso la proprietà Caption, in questo caso Informazioni. Una volta messo a punto
l'aspetto ed il comportamento del form, si dovrà inserire dentro di esso una Label ed un
CommandButton. Alla label si assegnerà il nome lblInfo, sempre tramite la proprietà Name, e
al commandbutton il nome cmdOk. All'interno dell'evento Click del commandbutton si dovrà
inserire l'istruzione per scaricare il form stesso. Il codice potrebbe essere :

Private Sub cmdOk_Click
Unload Me
End Sub

Una volta impostato il form si dovrà utilizzare un nuovo tipo di modulo, il modulo di classe,
inserendolo nel progetto tramite il menù Inserisci. Quello che apparirà a prima vista sembrerà
un qualsiasi modulo standard, ma vi sono significative differenze. Se si guarda la lista delle
proprietà, che si può richiamare tramite il tasto F4, si potrà vedere oltre alla proprietà Name
anche la proprietà Istancing e Public. Se si scorre la listbox Object, quella presente sulla
sinistra del modulo stesso, si potrà notare che contiene un oggetto di nome Class e che questo oggetto possiede due eventi: Initialize e Terminate. C'è anche da sottolineare che il modulo di classe è gestibile come un oggetto all'interno, o all'esterno, dell'applicazione. Per procedere si dovrà assegnare alla proprietà Name un valore che corrisponderà al nome del modulo di classe, in questo caso Informazioni. Poi alla proprietà Istancing si dovrà impostare il valore 2 - Creatable MultiUse e si dovrà fare in modo che la proprietà Public sia impostata
a True. La proprietà Istancing serve a stabilire se si possono o meno creare nuove istanze
dell'oggetto, e se l'oggetto può essere condiviso da più d'una applicazione. La proprietà
Public serve ad esporre la classe, a renderla disponibile alle altre applicazioni.
Una classe non pubblica, proprietà Public impostata su False, potrebbe essere utilizzata
solo all'interno dell'applicazione dove risiede. Gli eventi Initialize e Terminate si verificano
quando viene creata una istanza d'oggetto o quando viene distrutta. Per completare
l'OLE-Server occorre creare almeno una proprietà ed un metodo all'interno del modulo
di classe. La proprietà ci servirà per inviare dall'applicazione client del testo al server.
Il metodo per far comparire il form. Quindi si inserirà una procedura di tipo Public Property
con nome Caption, attraverso il menù Inserisci. Questa operazione crea due proprietà, 
una di tipo Let e una di tipo Get. La prima serve per scrivere il valore della proprietà,
la seconda per leggerlo. Si dovrà cancellare la proprietà di tipo Get, in questo modo
sarà a sola scrittura. All'interno della procedura si dovrà inserire l'istruzione per assegnare
il valore impostato alla proprietà nella label contenuta nel form. Il codice dovrà apparire
in questo modo:

Public Property Let (vNewValue as String)
frmInfo.lblInfo.Caption = vNewValue
End Sub


Una volta completata la proprietà si potrà accertare la sua presenza attraverso
il Visualizzatore oggetti del menù Visualizza. Procedendo si dovrà aggiungere un metodo,
e per farlo si inserirà una Sub di nome Show. All'interno della procedura si dovrà scrivere
l'istruzione per visualizzare il form. Il codice dovrà apparire in questo modo:

Public Sub Show
frmInfo.Show
End Sub


In questo modo la classe controllerà alcune caratteristiche del form. Dato che il form non può
essere visto e gestito dall'esterno come un oggetto ed invece la classe permette di essere
visibile, verrà creato un nuovo oggetto gestibile dall'esterno che controlla un form.
E da notare che ogni proprietà e metodo sono di tipo Public. Se tali metodi o proprietà non
fossero di tipo Public sarebbero visibili esclusivamente all'interno del modulo di classe.

Per proseguire si dovranno modificare alcuni attributi del progetto chiamando dal menù
Strumenti il comando Opzioni, spostandosi poi sulla pagina Progetto presente nella finestra
visualizzata. In Form di avvio si dovrà impostare il valore Sub Main, in Nome progetto si
dovrà impostare un nome idoneo, in questo caso MyOleSvr. In una applicazione standard
questo attributo non ha alcuna importanza, in una applicazione OLE-Server è assolutamente
fondamentale per poter richiamare il server da un'altra applicazione. L'attributo Modalità
avvio non ha alcuna rilevanza una volta creata la DLL, è invece importante se si vuole
testare il server durante lo sviluppo. Poiché in VB 4.0 è possibile lanciare più istanze
dell'ambiente di sviluppo, è possibile provare un'applicazione OLE-Server senza averne
creato la DLL. In questo caso bisognerà scegliere l'opzione Server OLE.
L'attributo Descrizione applicazione, aggiunge una frase di descrizione al server.
Questo attributo non ha nessuna reale incidenza sul funzionamento, ma serve per comunicare
agli utilizzatori del componente il nome e la versione del server.
Dopo questi ultimi ritocchi si potrà compilare il progetto.
L'OLE-Server per essere richiamato da altri applicativi deve essere registrato nel sistema.
Quando si crea la DLL il VB procederà automaticamente a registrare l'OLE nel sistema,
oppure si potrà utilizzare l'applicazione REGSVR32.EXE presente nei TOOLS aggiuntivi
del VB, distribuiti assieme al VB stesso. Per verificare che l'OLE-Server sia stato registrato
correttamente nel sistema, basterà lanciare REGEDIT (l'applicazione che permette di
editare il database di registrazione del sistema) e cercare con un Find l'OLE creata,
ovvero la stringa MyOLESvr.

Per usare l'OLE-Server, si dovrà creare un nuovo progetto VB. Si dovrà anche verificare
che nella lista dei riferimenti, che è possibile richiamare attraverso il menù Strumenti alla
voce Riferimenti, compaia l'OLE-Server creato e che sia abilitato. Nel form del nuovo
progetto si dovrà inserire un pulsante. Si dovranno assegnare le proprietà essenziali sia al
form che al pulsante. Nell'evento Click di quest'ultimo si procederà alla scrittura delle
istruzioni per utilizzare l'OLE-Server. E' possibile procedere in due modi:

Dim MyInfo As New MyOLESvr.Informazioni
MyInfo.Caption = "Hello!"
MyInfo.Show


oppure

Dim MyInfo As Object
Set MyInfo = CreateObject("MyOLESvr.Informazioni")
MyInfo.Caption = "Hello!"
MyInfo.Show


Quest'ultima si differenzia dal fatto che se l'OLE-Server non è stato registrato correttamente,
l'istruzione CreateObject genererà un errore intercettabile con un On Error ..., a differenza
della prima che non genera errori fintanto che non si utilizzerà un metodo o una proprietà
dell'OLE-Server.

Ci sono però delle limitazioni durante la programmazione di OLE-Server.
Queste informazioni possono essere lette attraverso l'Help del VB. 

Testato su: tutti i Sistemi Operativi