IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

[VC++] DLL et STL


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Developpeur PHP Magento e-commerce
    Inscrit en
    Juin 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Developpeur PHP Magento e-commerce
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 53
    Par défaut [VC++] DLL et STL
    Bonjour,

    je suis en train de créer un logiciel capable de charger des modules externes contenus dans des DLL via un gestionnaire lui-même contenu dans une DLL. pour faire tout ca, j'utilise la fonction LoadLibraryA de l'API win32 qui me renvoie un HMODULE.

    seulement, comme je n'aime pas perdre de vue une ressource durant l'exécution, je veux conserver ces HMODULE dans un map de la STL, mais le compilo n'est pas d'accord avec moi:

    d:\nano engine\kernel\kernel.h(70) : warning C4251: 'kernel::modules' : class 'std::map<_Kty,_Ty>' nécessite une interface DLL pour être utilisé(e) par les clients de class 'kernel'
    with
    [
    _Kty=module_interface *,
    _Ty=HMODULE
    ]
    voici ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    class NANO_API kernel :
        public singleton<kernel>
    {
    friend class singleton<kernel>;
     
    protected:
        kernel();
        kernel(kernel &);
        kernel &operator= (kernel &);
        ~kernel();
     
    public:
        module_interface * load(file &f);
        void unload(module_interface * m);
     
        void dump();
     
    private:
        std::map<module_interface *, HMODULE> modules;
    };
    les module_interface * sont des pointeurs vers une classe abstraite, à chaque chargement de DLL, j'appelle une fonction contenue dans la DLL qui me renvoie un pointeur vers sa "version" de cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    typedef module_interface * (*module_load_type)();
     
    module_interface * kernel::load(file &f)
    {
        HMODULE lib = LoadLibraryA(f.path().c_str());
        if(!lib)
            throw exception::load_error("Unable to load module library. The file may not exist.");
     
        module_load_type function = reinterpret_cast<module_load_type>(GetProcAddress(lib, "load_module"));
        if(!function)
            throw exception::load_error("Unable to load module."
                "Function \"load_module\" not found.");
     
        module_interface * module = function();
        modules[module] = lib;
     
        return module;
    }

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Voir ici :
    http://www.developpez.net/forums/sho...5&postcount=22
    Et la réponse qui est juste au-dessous.

  3. #3
    Membre averti
    Profil pro
    Developpeur PHP Magento e-commerce
    Inscrit en
    Juin 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Developpeur PHP Magento e-commerce
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 53
    Par défaut
    c'est plus simple que ce que je pensais , merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DLL] et classes de la STL ?
    Par NiamorH dans le forum C++
    Réponses: 3
    Dernier message: 17/02/2009, 12h22
  2. Réponses: 7
    Dernier message: 25/11/2005, 17h11
  3. conteneur de la STL (problème avec DLL et COM)
    Par moldavi dans le forum MFC
    Réponses: 8
    Dernier message: 25/07/2005, 22h43
  4. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo