Newsgroup: it.comp.programmare.win32
Titolo: [H] creare e gestire una finestra da dentro una dll

 creare e gestire una finestra?
Intendi fare tutto dalla DLL, quando essa viene caricata? Si potrebbe
provare a creare un nuovo thread nella DllMain() e a mettere li` il
nuovo loop dei messaggi nonche` il codice di creazione delle finestre.
Dovrebbe funzionare.
Pero` tutto cio` e` *assai* brutto; molto meglio studiare meglio
l'architettura della propria applicazione, in modo che le finestre
vengano create dal modulo principale e non debba essere la DLL a
crearsele da sola.
---
Bye! Lorenzo Lutti
http://www.geocities.com/cirovampiro/

HMODULE)...
azz... questo spiega perchè le mie dll di prova scritte in Visual Basic 
davano errore di "Il componente ActiveX non può creare l'oggetto" quando 
cercavo di mostrare una form... e perchè la callback non veniva mai 
chiamata quando usavo CreateWindowEx... aaaah, allora il povero VB non 
c'entrava nulla, quanto gli avevo cristonato dietro... beh, però ho visto 
parecchie dll creare dialog... ma ora che ci penso forse le creava il 
processo chiamante caricandole dalle risorse

gestire una finestra?
Le DLL vengono e mappate nello spazio di indirizzamento del processo
che le carica e questo significa che diventano in tutto e per tutto
un'estensione del processo. Se nella DLL e' presente una routine che
crea una finestra e se e' presente la relativa window procedure, non
c'e' alcun problema, perche' ad essa verrano "dispatchati" i messaggi
che arrivano al thread principale del processo.

 ha scritto nel messaggio
news:8FED4BB...@127.0.0.1...

No, non e' esatto.  Come ben sai i form in Visual Basic non possono
essere dichiarati Public e quindi il loro scope e' limitato all'applicazione
che li genera. E' comunque possibile condividere tra applicazioni i
form e dialog mediante server DLL ActiveX. La tecnica e' molto semplice:
si realizza una public class wrapper che espone la stessa interfaccia del
form o dialog. L'unica avvertenza a questo punto e' di non richiamare
direttamente gli oggetti del form ma passare sempre per la classe istanziata
(sta' a te realizzare il giusto disaccoppiamento di interfaccia).
Ciao.
Il Michett@
--


Creare un nuovo thread dentro DllMain è sconsigliabile.
Attorno a DLLmain c'è una critical section "invisibile" che impedisce che 
la funzione venga richiamata da più thread contemporaneamente. 
Visto che l'attivazione di un nuovo thread genera un "evento" 
DLL_THREAD_ATTACH, l'attivazione del thread è bloccata finchè non è 
terminata l'esecuzione di DllMain relativa al DLL_PROCESS_ATTACH (quella 
da cui il thread stesso è stato lanciato), è molto facile quindi "cascare" 
in una situazione di deadlock.
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

applicazioni i form e dialog mediante server DLL ActiveX.
non hai capito. Io avevo fatto una dll con una funzione AboutBox() 
esportata sia dall'interfaccia ActiveX sia dalla dll vera e propria. L'exe 
di prova era una cosa del genere:
Declare Sub APIAboutBox Alias "AboutBox" Lib "testdll" ()
Dim myTest as TestDll
Sub Main()
Set myTest = New TestDll
' Questa funziona
myTest.AboutBox
' Questa darà errore: "Il componente ActiveX non può creare l'oggetto"
' ed eventualmente causerà un crash nel modulo testdll.dll
AboutBox
End Sub

 End Sub
Ah..ok I got it! Ammetterai che come idea e' alquanto malsana! :^)
Ciao.
Il Michett@
--

Ah..ok I got it! Ammetterai che come idea e' alquanto malsana! :^)
era per esercitarmi a fare le exports con il linker :)

orbene, come ottenere codesta HINSTACE da dentro il processo?
orbene
orbene
orbene
:PPP
cia'
garph0 e' sbronzo e pertanto si scusa anticipatamente con chi ha perso
tempo per leggere sto emssaggio ;)