Unire più progetti MFC
Mattneri
Qualche giorno fa a lavoro mi è capitato un problema per il quale apparentemente non ho trovato alcuna risposta anche cercando da google.
Ho sviluppato un nuovo controllo ocx e il problema stava proprio nell’integrare il mio nuovo controllo in una libreria di ocx già esistente.
La struttura di un normale progetto activex utilizzando Visual C++6 è la seguente:
Classi:
- MyOcxApp: Classe derivata da COleControlModule che presenta metodi per l’inizializzazione e la pulizia delle risorse utilizzate dalla nostra applicazione.
- MyOcxCtrl: Classe derivata da COleControl. In questa classe verrà scritto la maggior parte del codice del controllo.
- MyOcxPropPage: Classe derivata da COlePropertyPage e utilizzata per la gestione del dialog della Property Page del nostro controllo.
File:
- File .h e .cpp
- File .odl: Contiene il codice dell’Object Description Language. Descrive l’interfaccia che il nostro controllo ocx espone.
- File .def: File contenente le informazioni per il linking, il nome e la descrizione del controllo.
- File.rc: File testuale contenente la descrizione di tutte le risorse utilizzate nel nostro progetto
- File Resource.h: File header utilizzato dal file .rc. Non fa altro che definire delle costanti che poi verranno associate alle varie risorse utilizzate nel progetto.
La situazione iniziale in cui mi trovavo era la seguente: avevo un progetto che consisteva in una raccolta di diversi controllo ocx (chiamiamolo ad esempio BigOcx) e un altro progetto con il mio nuovo ocx (chiamiamolo NewOcx )…come fare per inserire il nuovo controllo nel primo progetto?
Premetto che VS6 non presenta ovviamente una soluzione semplice al problema ma bisogna un pò arrangiarsi copiando e mergiando files qua e la
Dopo svariate prove e altrettanti insuccessi ho buttato giù la seguente scaletta:
- Assicurarsi di avere dato dei nomi univoci a tutte le risorse (dialog, icone, bmp, …) presenti in NewOcx, in modo che non si creino conflitti con altre risorse già presenti in BigOcx
- Copiare e aggiungere i file .h e .cpp relativi alle classi NewOcxCtrl e NewOcxPropPage nel progetto BigOcx
- Correggere gli #include nei file appena copiati
- Aprire il progetto BigOcx e aprire la ResourceView, poi tramite File - Open selezionate il file.rc di NewOcx. A questo punto fate Drag&Drop di tutte le risorse che volete copiare. Infine copiate anche le stringhe di NewOcx in BigOcx.
- Mergiate il file BigOcx.odl con quello NewOcx.odl stando attenti a copiare in BigOcx.odl solo le parti relative al controllo NewOcx (in genere a partire dalla stringa di commento: // Primary dispatch interface for NewOcxCtrl)
- Provate a compilare ed a testare nell’ocx container il controllo.
Se avete seguito correttamente le istruzioni il progetto dovrebbe compilare senza problemi e vi dovrebbe essere un solo problema e cioè che aprendo il ClassWizard non siano presenti le classi relative al controllo appena inserito. Per risolvere basterà cancellare il file BigOcx.clw presente nella directory del vostro progetto.
Posted in MFC, Programmazione |
2 Comments »
