Newsgroup: it.comp.lang.visual-basic
Titolo: Type in DLL

sapendo che le variabili di tipo type (definito dall'utente) in C o in JAVA 
si chiamato classi
ho avuto il "lampo di genio" di utilizzare 1 modulo di classe in 1 dll 
impostando alcune proprietà
in particola nella MiaDll.DLL ho un modulo di classe chiamato MiaCls.CLS.
in questa classe ho 2 proprieta GET/LET:
 - Nome
 - Cognome
parte il mio Programma.exe e imposto le variabili e le leggo.
tutto ok!!!
Ma qando poi voglio che 2 programmi diversi facciano rifermimento agli 
stessi dati le variabili si resettano da Programma a Programma
es.
dal programma1.exe eseguo
    MiaDLL.nome="mionome"
    miadll.cnome="miocnome"
    msgbox miadll.nome
dal Programma2.exe eseguo
    msgbox miadll.nome
risultato:
 - Programma1.exe >> messaggio con scritto "mio nome"
 - Programma2.exe >> messaggio..... VUOTO!!!!!!!!!!!!!!!! 
GRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
per favore ditemi come posso fare a lasciare le variabili intatte per tutta 
la durata della dll e visibili allo stesso modo da + programmi!!!! 


Non ce la puoi fare, le DLL sono componenti in-process, vale a dire che vengono
caricate nello spazio di memoria di ciascun processo (EXE) che la utilizza.
Se hai 2 processi, hai 2 copie separate della stessa DLL.
Workarounds:
- ogni DLL legge/scrive su una risorsa condivisa "persistente" (un DB, un file
INI, XML, quel che ti pare...). In questo caso occorre anche prestare attenzione
ad eventuali accessi concorrenti alla risorsa condivisa, prevedendo opportuni
meccanismi di locking e/o retry...
- tecnica un po' complicata che utilizza un ActiveX/EXE di appoggio, che ometto
per brevità
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 per brevità
Si potrebbe anche pensare a un sistema basato sui messaggi.
Personalmente trovo la 2 la più semplice da realizzare.
Ciao 

"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:eja3e5$m76$1...@alix.livenet.it...

Ma se devi passare dei valori tra due exe xchè nn provi con le dde 

 per brevità
Ed anche qui non è semplice perchè ogni EXE Ax lavora su un processo
diverso e la memoria di ogni processo è blindata da accessi
dall'esterno!
Occorre creare un pagina di memoria condivisa e gestire gli accessi
simultanei!
Ciao,
Daniele.


In realtà utilizzando il threading model giusto (apartment) si riescono a
condividere molto facilmente le variabili globali dell'exe ax tra più thread.
OVVIAMENTE solo 1 client alla volta vi potrà accedere, gli altri... aspettano.
Ma tanto se le chiamate sono delle semplici get/let, le attese dovrebbero essere
altamente improbabili.


 condividere molto facilmente le variabili globali dell'exe ax tra più thread.
Apartment?! Sicuro che non è con il pool che si condividono le
variabili globali?!?
Ciao,
Daniele.

 variabili globali?!?
mmm... è un bel pezzo che non ne faccio più, ma credo che per gli Ax exe non 
importi poichè girando in un processo separato e vivendo di vita propria le 
variabili siano comunque condivise.
Ricordo che quando lo facevo in Delphi invece c'erano un po' più di opzioni 
che permettevano ad esempio la multiistanza del server COM e quindi la 
possibilità di avere variabili non condivise.
Ciao

 Daniele.
In effetti ho poi riguardato il progetto in cui utilizzavo la tecnica cui
accennavo nel primo post: esso consta di 1 ax exe (con "Thread per object" ma
credo che sia ininfluente), e 1 ax DLL, quella con la classe da "condividere":
per questa ho necessariamente "Single Thread".


ragazzi vi ringrazio di tutto cuore
ma credo di aver sviato e essere riuscito con un metodo + che orrendo ma 
vedo che funziona
il mio .exe carica la DLL con le proprietà che mi interessano e le imposta a 
mio piacimento
Le altre DLL (contenenti Form e quindi ramificazioni del mio .exe ) vengono 
caricate tutte all'avvio.
ognuna di qusta dll contiene una funzione così implementata!
dim ClasseVariabili as object
public function PrimaFunc(byref ModVar as object)
    set classevariabili=modvar
end function
così facendo imposto le variabili nel .exe ma come per magia sono leggibili 
e modificabili anche nelle altre DLL!!
metodo assurdo ma sinceramente... per ora funziona.
voi che dite?