Allora il problema è questo: supponiamo che un thread debba utilizzare la DLL "esempio.dll" (di cui si ha solo l'eseguibile e quindi NON è modificabile), e all'interno di questa dll ci sia una funzione "InitDll(int a)", questa funzione ha il compito di inizializzare la variabile globale "g_a" all'interno della dll stessa.
Ora il thread richiama la libreria in questo modo:

THREAD 1
HINSTANCE hModule1=LoadLibrary("esempio.dll");
InitDll(10);
//g_a adesso vale 10
...
altre chiamate alla dll
...


Supponiamo ora che io voglia utilizzare la STESSA dll ma all'interno di un altro thread, ma supponiamo che questo thread la debba utilizzare inizializzando la variabile "g_a" in modo diverso:


THREAD 2
HINSTANCE hModule2=LoadLibrary("esempio.dll");
InitDll(5);
//g_a adesso vale 5
...
altre chiamate alla dll
...

Ora il problema è che quando io chiamo la InitDll(5), anche il THREAD1 risente di questa modifica, mentre io non lo vorrei.
Questo e dovuto al fatto che hModule2 è uguale a hModule1, ossia la dll, pur essendo chiamata da thread diversi viene caricata ogni volta nella stessa area di memoria (area di memoria "di processo" cioè comune a tutti i thread e al processo principale).
Ora vorrei sapere è possibile caricare in zone di memoria diverse la stessa dll richiamandola da thread differenti?



P.S. non datemi la soluzione banale di fare una copia della dll e rinominarla "esempio2.dll", perchè bisogna supporre di poter avere N thread!


Ciao grazieee!