Newsgroup: it.comp.lang.visual-basic
Titolo: Domanda difficile su programmazione a oggetti

Ciao ragazzi!
qualche tempo fa avevo scritto al ng per un problema che ho e che
ripropongo:
Ho sviluppoto una sorta di kernel per lo sviluppo di applicazioni
client-server in VB.
Questo kernel è sostanzialmente una dll che poi voglio includere come
riferimento in altri progetti .exe
Il kernel ha un oggetto application con un metodo init al quale devo
passare, tra le altre cose un tab control (SSTAB) standard.
Ebbene io creo il mio file .exe, includo il riferimento chiamo il metodo
e passo un oggetto tabcontrol disegnato in una form.
Tutto funziona se il .exe lo creo dal computer che ha compilato la dll
del kernel ma se provo a registrare la dll su un secondo pc con la
stessa versione di VB installato e provo a creare un nuovo .exe il
compilatore mi da l'errore di tipo non corrispondente al passaggio del
tab control.
La cosa ancora più strana è che se riapro il sorgente del kernel dal
secondo pc, lo ricompilo, e riapro il sorgente dell'exe tutto funziona
correttamente.
Qualcuno sa darmi un'idea del perchè succede questo?
Ah, tutti i miei componenti sono compilati con compatibilità binaria.
Ringrazio tutti in anticipo e mi scuso per la rottura di scatole.
Ciao!
alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Qualcuno sa darmi un'idea del perchè succede questo?
Può essere che hai montato 2 service pack diversi sui 2 pc di sviluppo??
Esempio il componente si aspetta la versione del service pack 5 del
sstabControl, mentre quello che tu li passi è quello del service pack 4..
Anche se (in teoria), vista la compatibilità binaria, dovrebbe sbattersene..
Io ci o provato..
Fammi sapere cosa era..
Ciao
oZ

 ha scritto nel messaggio
news:00e97151798dd3dcd25...@mygate.mailgate.org...

Anche se non uso SSTAB (l'ocx è il TABCTL32.OCX giusto ?)
credo che il tuo problema stia nella differente versione del file .OCA
Controlla il TABCTL32.OCA sui 2 sistemi ; "dovresti" notare differenza
quanto meno nella data/ora di creazione (banalotta come affermazione).
Non so quanto sia ortodosso quello che sto per dirti ma io faccio cosi e mi
funziona :
1) Accertati che il il TABCTL32.OCX sia esattamente lo stesso fra i 2
sistemi
   (nel mio caso 209.608 kb del 06/12/2000)
2) Copia il TABCTL32.OCA dal sistema "principale" (in pratica quello dove la
dll ti funziona)
    all sistema secondario sovrascrivendo quello già presente nella
directory di sistema
(nel mio caso winnt\system32)
3) Apriti una finestra "risorse del computer" sulla directory di
installazione di vb
    (nel mio caso C:\Programmi\Microsoft Visual Studio\VB98) e ordina i file
per data decrescente
4) Lancia vb e crea un nuovo progetto, includi il componente TABCTL32 e
piazza
  un sstab sul form.
5) Salva il progetto
6) Verifica se nella directory di cui al punto 3 è nato un nuovo
TABCTL32.OCA
o un nuovo file .OCA con un nome strano tipo "vbc00853.oca"
7) Se la risposta al punto 6 è NO sei già a posto;se la risposta è SI
allora devi fare questa mossa:
lancia regedit e cerca il file  TABCTL32.OCA oppure vbc00853.oca (mettendo
ovviamente
il nome file chi ti ha generato il tuo sistema). Quando trovi
C:\Programmi\Microsoft Visual Studio\VB98\TABCTL32.OCA  oppure il solito
nome vbc. ecc.
sostituisci il contenuto del registro con il path +nome.oca di cui al punto
2
es:
c:\winnt\system32\TABCTL32.OCA
dovresti trovare se non ricordo male 2 riferimenti da sostituire.
Riprova a fare i punti da 4 a 6 e la risposta al punto 6 dovrebbe essere NO
Ho cercato di non fare + confusione di tanto, sperando tu mi abbia seguito.
Io con questo meccanismo, tengo in vita (e allineata) tutta la libreria di
sviluppo
dei miei programmi (svariati ocx e dll) su 2 sistemi (1 win2000 pro e 1
notebook win 98se) ;
 qualcuno potrà (giustamente) obiettare che bastava deregistrare e
riregsstrare il componente,
ma per la mia esperienza, per far digerire il .oca da un sistema all'altro a
volte non ci sono altri modi.
SPERO VIVAMENTE di provocare un thread sull'argomento OCA in quanto nei
giorni scorsi
ho pubblicato su questo newsgroup un messaggio dal titolo  ".OCA la mia
maledizione" che
purtroppo non è stato raccolto da nessuno; se qualcuno mi rispondesse:
"guarda, non hai capito nulla, si fa cosi e cosi..." gliene sarei grato, ma
ho dei dubbi che accadrà.
Ciao Luca


Macchè, il service pack (il 5) è lo stesso.
Poco fa ho notato che un riferimento incluso nel famoso Kernel è
impostato su
compatibilità progetto.
Che sia questo?
Giovedì rientro in ufficio e provo, poi vi faccio sapere.
Grazie
Alex


Grazie Luca!
Non posso provarlo subito ma può essere una soluzione.
Sinceramente non so molto su ocx e oca però posso dirti che ho anch'io
un sacco
di casini...
Soprattutto su conflitti di versione e di compatibilità.
Se non posso aiutarti almeno di dico che sei in buona compagnia.
Farò sapere appena provato.
Grazie e ciao!
