Newsgroup: it.comp.programmare.win32
Titolo: Aprire CDialog da DLL MFC

Come da topic:
Come si fa ad aprire un CDialog da una DLL in VC++ 6.0 ?
Ci sto impazzendo.
Grazie.
Mik
--

 Come si fa ad aprire un CDialog da una DLL in VC++ 6.0 ?
perché? che problema c'è con DoModal?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 perché? che problema c'è con DoModal?
Sembra che non tiri su le risorse. Lo stesso codice funziona tranquillamente
se fatto girare in una applicazione win32.
Ho provato anche a costruire un CDialol praticamente vuoto (quello di
default del ClassWizard) senza risultato. Mistero nero!
Mik
--

 Sembra che non tiri su le risorse.
mi sembra *molto* strano che non sia possibile includere un file di
risorse in una DLL.
1) sei sicuro che il tuo file .rc sia incluso nel progetto e che venga
passato al compilatore?
2) io ho notato che in rari casi Visual C++ 6.0 fa casino con le macro (e
quindi anche con gli ID delle risorse); a me a volte è capitato di non
riuscire a caricare delle risorse perché dopo aver fatto dei cambiamenti
negli ID, l'ID che veniva passato come parametro nella funzione di
caricamento non coincideva con quello della risorsa; il tutto si poteva
risolvere facendo Rebuild All anziché un semplice Build: in tal modo VC++
ricompila anche i sorgenti oltre che il file .rc, e aggiorna anche le
ricorrenze delle macro nei singoli sorgenti.
Al


 ricorrenze delle macro nei singoli sorgenti.
Ti puoi immaginare quanti rebuild ho fatto...
Forse il problema dipende dal fatto che la classe del dialog era in un
progetto diverso e per includerla nella dll la ho prima passata nella
libreria (add to gallery) e poi aggiunta al progetto della mia dll con
project/add to project/components and controls.
Grazie comunque del tuo aiuto.
Mik
--

 ha scritto nel messaggio
news:bnoaib$b6$1...@fata.cs.interbusiness.it...

Mi pare di capire che la tua DLL usa MFC.
Si tratta di una "MFC Regular DLL" oppure di una "MFC Extension DLL"?
Ciao. Federico.

 Si tratta di una "MFC Regular DLL" oppure di una "MFC Extension DLL"?
in entrambi i casi dovrebbe essere in grado di caricare una risorsa, no?



Si', ma occorre spiegare a MFC *dove* trovare la risorsa. In un caso occorre
utilizzare l'handle globale dell'applicazione, in un altro quello della DLL.
In sostanza occorre fare le cose giuste nel DLLMain.
Ciao. Federico.

 In sostanza occorre fare le cose giuste nel DLLMain.
Ovvero ?
Mik
--

 Ovvero ?
Da MSDN, per "regular DLL dynamically linked":
| A regular DLL, dynamically linked to MFC has the following
| requirements:
| - These DLLs are compiled with _AFXDLL defined, just like an
|   executable which is dynamically linked to the MFC DLL. But
|   _USRDLL is also defined, just like a regular DLL which is
|   statically linked to MFC.
| - This type of DLL must instantiate a CWinApp-derived class.
| - This type of DLL uses the DllMain provided by MFC. Place all
|   DLL-specific initialization code in the InitInstance member
|   function and termination code in ExitInstance as in a normal
|   MFC application.
per "regular DLL statically linked":
| A regular DLL, statically linked to MFC has the following
| requirements:
| - This type of DLL must instantiate a class derived from
|   CWinApp.
| - This type of DLL uses the DllMain provided by MFC. Place
|   all DLL-specific initialization code in the InitInstance
|   member function and termination code in ExitInstance as
|   in a normal MFC application.
| - Even though the term "USRDLL" is obsolete, you must still
|   define "_USRDLL" on the compiler command line. This definition
|   determines which declarations, etc., will be pulled in from the
|   MFC header files.
Quindi se hai delle "regular DLL" devi istanziare degli oggetti
derivati da CWinApp. Se invece hai delle "extension DLL" allora nel
DLLMain devi invocare AfxInitExtensionModule() e AfxTermExtensionModule(),
mentre l'oggetto CWinApp *non* va istanziato.
In ogni caso il modo piu' semplice e' creare le DLL "regular" o
"extension"  come progetto come "MFC appwizard (DLL)" e leggere
i commenti che il wizard mette nei sorgenti. Provare per credere.
Ciao. Federico Molara.

 Ciao. Federico Molara.
Chiarissimo.
Grazie mille !
Mik
--