Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670

    [C++] Variabile globale in una DLL

    Ciao a tutti,
    Sto realizzando una DLL col Visual C++, in che modo bisogna dichiarare una variabile globale? (cioè visibile da tutte le funzioni della DLL) ?

    Scusate la domanda idiota, ma purtroppo non ho mai usato il C++, mi serve per forza di cose questa semplicissima DLL, con 2-3 funzioni.

    Grazie mille

  2. #2
    Devi definirla in cima, al di fuori del corpo delle funzioni. Se poi vuoi che sia visibile da qualunque .cpp, dovrai anche dichiararla come extern in un header che andrai ad includere in tutti i .cpp.
    Occhio comunque che, a seconda di come viene usata la dll, delle variabili globali potrebbero non essere una buona idea.
    Per inciso, scrivere dll non mi pare il migliore approccio al C++, o quantomeno, non il più facile...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670
    perché non è una buona idea?

    Praticamente un mio software chiama una funziona della DLL, se il controllo passa setto la variabile a TRUE, senza rifare ogni volta lo stesso controllo.

    è sbagliato?

    Calcola, come se fosse una login, faccio il controllo e setto l''utente come loggato, senza controllare di volt ain volta i dati di accesso.
    Fammi sapere che è un aspetto molto importante, praticamente mi interesserebbe molto sapere per quale motivo l'approccio alle variabili globali è secondo te sbagliato.


    Grazie

  4. #4
    Ho detto che in alcuni casi è sbagliato; nello specifico, quando non sai se il codice del chiamante è multi-threaded o meno, e soprattutto quando la variabile globale (che di fatto viene inizializzata dalla "vera" DllMain) è un oggetto che nel suo costruttore/distruttore fa operazioni che sarebbero vietate nel DllMain. Dai un'occhiata qui per ulteriori dettagli.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670
    ok, ultima domanda.
    Bisogna in qualche modo liberare la memoria(per questa variabile globale) al termine del lavoro svolto dalla DLL?

  6. #6
    No, devi liberare solo la memoria che allochi dinamicamente (con new/malloc/...).
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670
    comunque a me basta:

    codice:
    bool attivo;
    e stop.

    Praticamente quando l'utente è loggato la imposto su true.
    Nessun altra operazione

  8. #8
    Ok, allora non dovrebbe porre problemi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Originariamente inviato da ombra
    comunque a me basta:

    codice:
    bool attivo;
    e stop.

    Praticamente quando l'utente è loggato la imposto su true.
    Nessun altra operazione
    meglio sarebbe:
    codice:
    bool globalMyDllAttivo;
    meglio ancora:
    codice:
    static bool globalMyDllAttivo = false;
    
    bool IsMyDllAttiva (void){
      return globalMyDllAttivo;
    }
    
    void SetMyDllAttivo (const bool theAttivo){
      globalMyDllAttivo = theAttivo;
    }
    Insomma rendi opaca la variabile globale, ed esporti le funzioni per maneggiarla.
    ;-)

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670
    ottimo!!!
    grazie a tutti

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 © 2024 vBulletin Solutions, Inc. All rights reserved.