Just another IT weblog

Unire più progetti MFC

Novembre 26th, 2006 by 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 »

Configurare la LAN via script sotto Windows

Novembre 11th, 2006 by Mattneri

Direttamente dal sito di TechNet vi riporto la descrizione del comando Netsh:

Il comando netsh è un’utility per la creazione di script da riga di comando che consente di visualizzare o modificare la configurazione di rete di un computer in esecuzione in modalità locale o remota.

A cosa può servire tutto ciò?

Mettiamo che abbiate un portatile e lo utilizziate sia a casa che in ufficio. Ogni volta dovreste andare a riconfigurare i vari parametri di rete con una certa perdita di tempo. Se poi tale operazione viene fatta da una persona senza grandi competenze informatiche può portare a vari errori.

Proprio per questo (e chiaramente per svariati altri utilizzi) ci viene in aiuto il comando Netsh.

Create un file, chiamato ad esempio casa.txt, con il seguente contenuto:

pushd interface ip

set address name="Connessione alla rete locale (LAN)" source=static addr=192.168.0.2 mask=255.255.255.0
set address name="Connessione alla rete locale (LAN)" gateway=192.168.0.1 gwmetric=0
set dns name="Connessione alla rete locale (LAN)" source=static addr=208.67.222.222 register=PRIMARY
add dns name="Connessione alla rete locale (LAN)" addr=208.67.220.220 index=2
set wins name="Connessione alla rete locale (LAN)" source=static addr=none

popd

Il precedente file non è altro che lo script da dare in pasto a Netsh per la configurazione di tutti i parametri della nostra rete locale.

Ora per eseguire tale script basterà digitare dalla linea di comando:

netsh exec casa.txt

Chiaramente nell’ottica di automatizzare tutto il processo basterà creare un file .bat contenente il precedente comando.

Un’altra cosa utile, nel caso in cui abbiate già configurato i parametri della vostra lan, è la possibilità di fare generare automaticamente a netsh il file di configurazione appropriato tramite la seguente sintassi:

netsh -c interface dump>miofile.txt

Posted in Networking, Windows | No Comments »