Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [VC] DLL: variabili globali->locali

    Ho da proporvi un problemino a cui non so dare una soluzione. :master:
    In un'applicazione multithread devo richiamare una DLL in cui sono dichiarate delle variabili globali che servono per il suo corretto funzionamento. Queste variabili vorrei fossero locali ad ogni thread dell'applicazione che che fa uso della DLL. In altre parole è come se volessi avere diverse istanze della DLL non per processi distinti ma per thread distinti.
    Domanda: è possibile farlo, (ovviamente senza modificare la DLL) e se sì come?

    Se sapete come farlo, vi dò il premio "tastiera d'oro 2002" ciao

  2. #2
    Nessuno sa niente??

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    DEVI SPIEGARTI MEGLIO SE PUOI

  4. #4
    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!

  5. #5

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    ah adesso ho capito cosa vuoi
    uhm... il modo c'è ma non so bene come... adesso mi informo e ti faccio sapere ...

  7. #7

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.