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

Langage C++ Discussion :

Chargement dynamique de méthodes statiques de classe (depuis une DLL)


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Chargement dynamique de méthodes statiques de classe (depuis une DLL)
    Bonjour,

    tout d'abord merci pour ce forum. Je tiens à préciser que j'ai longtemps cherché (forum, google, collègues) avant de poser la question sur ce forum.

    Mon but est le suivant:
    J'ai une classe (disons MB) qui exportée dans une DLL. Dans un EXE appelant cette DLL, je souhaiterais charger dynamiquement cette DLL (je veux la charger au runtime càd 'LoadLibrary' et 'GetProcAddress', et non pas au loadtime). J'ai déjà fait des trucs similaires dans le passé mais là, la classe MB contient des méthodes statiques et c'est là où ca coince !

    En détail:
    Voici le header de la classe MB, qui est aussi inclus dans le projet générant l'EXE. (Lors de la compilation de la DLL, on a défini 'MB_EXPORTS'. Et dans le projet de l'EXE, on définit 'MB_IMPORT_LIB').

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #ifndef _MB_H_
    #define _MB_H_
     
    	#ifdef MB_EXPORTS
    		#define MB_API __declspec(dllexport)
    	#else
    		#ifdef MB_IMPORT_LIB
    			#define MB_API __declspec(dllimport)
    		#else
    			#define MB_API
    		#endif
    	#endif
     
     
    MB_API class MB
    {
    public	:
    	/// Empty constructor. MUST NOT BE USED outside
    	MB();
    	/// Destructor MUST NOT BE USED outside
    	virtual ~MB();
    	/// assignment operator. NOT TO BE USED OUTSIDE
    	MB& operator=(const MB& MB_API);
     
     
    	///methode statique de chargement d'une sous DLL
    	MB_API	static int	   MB_LoadSubDll(const	char*	DllFile);
     
    	/// Initialise MB from config file
    	MB_API	int			  MB_init(const	char* Filename);
     
    private	:
    	// Structure containing all private data for this class
    	struct PrivateData;
    	PrivateData* pd;
    };
     
     
    /// Empty constructor. This one can be used outside
    MB_API MB*	  MB_Ctor(void);
     
    /// Destructor. This one can be used outside
    MB_API void			  MB_Dtor(MB* mb);
     
    #endif
    Pour info, j'ai créé aussi un .DEF pour avoir des noms de fonctions non-décorées dans la DLL.

    J'ai donc fait un créateur 'MB_Ctor' (il parait que c'est un constructeur, mais en dehors de la classe), j'ai exporté les méthodes et la classe.

    • J'ai essayé de faire une classe Interface avec des fonctions virtuelles: mais on ne peut pas faire de fonctions virtuelles statiques.
    • J'ai essayé la méthode du 'static_cast< >', mais je n'arrive pas définir les types de fonctions...



    Mes contraintes:
    je peux rajouter de nouvelles interfaces à la DLL, mais je ne peux pas modifier la signature des méthodes actuelles. A part ca, je peux a peu près faire tout ce que je veux.


    J'espère que je me suis exprimé clairement ! Alors j'attends vos réponses.

  2. #2
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Si je ne me trompe pas (je suis plus specialiste du C), une methode (ou tout autre symbole) statique n'est pas exporté (sa visibilité est limitée a l'objet). Donc non chargeable dynamiquement vers l'extérieur.

Discussions similaires

  1. Exporter et utiliser une classe depuis une DLL
    Par Havy_25 dans le forum Langage
    Réponses: 1
    Dernier message: 14/07/2009, 19h31
  2. Attaquer les méthodes d'un controle depuis une classe
    Par chti_vince dans le forum ASP.NET
    Réponses: 10
    Dernier message: 18/07/2007, 15h04
  3. Consommer les méthodes d'un controle depuis une classe
    Par chti_vince dans le forum ASP.NET
    Réponses: 8
    Dernier message: 12/07/2007, 09h22
  4. Réponses: 5
    Dernier message: 23/04/2007, 16h31
  5. [tomcat]chargement dynamique de classes depuis une webapp
    Par alphamax dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/03/2004, 09h59

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