Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Compilazione ActiveX

Buon giorno a tutti.
Ho apportate alcune modifiche ad un mio User_Control e sto accingendomi a
ricompilare il tutto per creare l'OCX.
Questo OCX, o meglio quello precedente alle modifiche di oggi è usato in
diversi miei progetti (VB5) funzionanti.
Nel finestra di compilazione, sotto la scheda 'Componente' c'è il frame
'Compatibilità versione' con 3 opzioni:
    Nessuna compatibilità
    Compatibilità progetto    (settata per default)
    Compatibilità binaria
e chiamando l'help compare ...................................
    Compatibilità versione   Consente di impostare il livello di
compatibilità della versione.
    · Nessuna compatibilità: non imposta alcuna compatibilità.
    · Compatibilità progetto: se questa opzione è selezionata, la casella
del percorso apparirà attivata e consentirà di cercare il file con  il quale
il progetto deve essere compatibile. In caso contrario, la casella del
percorso non sarà disponibile.
    Per tutti i tipi di progetto ActiveX, l'opzione Compatibilità progetto
viene selezionata per impostazione predefinita.
    · Compatibilità binaria: consente di mantenere la compatibilità tra i
progetti compilati utilizzando il componente creato.
    · Casella del percorso: visualizza il nome e la posizione del file con
il quale il progetto deve essere compatibile. È possibile digitare il nome e
la posizione o utilizzare il pulsante con i puntini di sospensione per
visualizzare la finestra di dialogo Componente ActiveX compatibile, in cui
sarà possibile cercare il file.
.................................................
Vorrei che i progetti utilizzanti il componente continuino a funzionare
comunque (senza dover apportare modifiche) anche dopo la nuova compilazione
dell'OCX mi chiedevo quale tipo di compatibilità sia più adatta allo scopo.
Qualcuno che ha gia fatto esperienza in merito potrebbe fornirmi ulteriori
delucidazioni ?

 mi chiedevo quale tipo di compatibilità sia più adatta
Compatibilità binaria. Prendi come riferimento la tua prima versione
dell'OCX e mantieni sempre quella, altrimenti la compatibilità binaria si
perde.
Ci sono comunque alcune modifiche che non puoi fare, ad esempio aggiungere
un parametro ad una funzione. Se lo fai, perdi irreparabilmente la
compatibilità.
Ciao
*Roby*




Grazie per la risposta.
(Scusami il ritardo ma per leggere questo NewsGroup utilizzo un server proxy
che non sempre è acceso.)
Ti chiederei ancora:
    se, invece di aggiungere un parametro, modifico il tipo (di dati) perdo
comunque la compatibilità? E gli eventuali progetti che ne fanno uso dovrei
ricompilarli facendo riferimento al 'nuovo' componente?
   Ciao
- Mario -

"Wiz@rd_2®®®" <fama®so...@Tiscali.It> wrote in message
news:ampms6$rjq$1...@newsreader.mailgate.org...

Sì in entrambi i casi. Ma dal momento che puoi sfruttare la compatibilità
binaria, impostala (anche se ho activex che non funzionano nonostante sia
stata impostata, se proprio vogliamo dirla tutta). L'unico svantaggio è
appunto questo, che non potrai mai più cambiare le funzioni pubbliche.
Questo ti impone se non altro di programmare con un po' di oculatezza. Si
usano normalmente alcuni accorgimenti:
(a) la dll (ocx o quello che è) viene compilata solo quando si è sicuri di
volerla rilasciare (finché non crei l'eseguibile, VB ti consente di
modificare le funzioni pubbliche).
(b) le funzioni pubbliche dovrebbero essere pensate meglio di quelle
private, in modo da ridurre al minimo le modifiche future (in genere una
funzione pubblica non fa il lavoro, che viene invece demandato a funzioni
private, che puoi modificare quanto vuoi).
(c) anche se è possibile, in vb si possono creare funzioni che accettano un
numero variabile di argomenti. Questo ti consentirebbe in futuro di ampliare
gli argomenti a seconda delle necessità, ma è una pessima tecnica di
programmazione che oltretutto rende il codice oscuro. Se scrivi una funzione
devi sapere a cosa ti servirà nei prossimi anni.
(c) se proprio devi, crei una funzione "Funzione2" con i parametri che ti
servono. "Funzione2" farà il lavoro della tua "Funzione" modificata
chiamando la stessa routine privata con gli argomenti optional
opportunamente aggiunti. Quindi la tua "FunzionePrivata" dovrà tener conto
delle chiamate sia da "Funzione" che da "Funzione2". Naturalmente pensaci
prima di compilare, altrimenti ti ritrovi presto con una "Funzione405".
Normalmente una versione 3 è considerata 'strana'. Il vantaggio è che le tue
applicazioni continueranno a girare con la nuova dll - sia quelle nuove, che
chiamano "Funzione2", sia quelle vecchie che continuano a chiamare
"Funzione". (A essere onesti, anche questo non sempre è vero, ma si fanno
casini solo in alcuni casi particolari, 
p.es
. se la dll ha classi global
multiuse, che però sconsiglierei di usare.)
--
rumplestiltskin