Bonjour,

Je travail sous Windows XP, et Visual C++ Express (compilateur CL, je n'utilise pas l'IDE).

Je cherche a créer un système de plug-in, chacun d'entre eux étant constitué d'une classe héritant d'une même classe "Module". Cette classe "Module" étant contenue dans l’exécutable principal. Cet exécutable contient aussi quelques fonctions d'api utilisables par chaque plug-in.

Les libs seront chargé au runtime via LoadLibrary().

J'ai retrouvé mon problème sur le thread suivant, mais la réponse est très courte :
http://cygwin.com/ml/cygwin/2007-06/msg00445.html
Et malgré tout mes tests je n'arrive pas a compiler les lib.

Les sources pour mes lib :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
// api.h
 
#ifndef API_H
#define API_H
 
#include <string>
 
class Printer{
public:
	void printString(std::string *str);
};
 
#endif /* API_H */
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// mod.h
 
#ifndef MOD_H
#define MOD_H
 
class Mod{
	public:
		virtual void printName();
};
 
typedef Mod *createMod_t();
typedef void destroyMod_t(Mod *);
 
#endif
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
// dm.h
 
#ifndef DM_H
#define DM_H
 
#include "mod.h"
 
class ModDM : public Mod{
public:
	virtual void printName();
};
 
extern "C" Mod *createMod();
extern "C" void destroyMod(Mod *p);
 
#endif
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
// md.cpp
 
#include "dm.h"
 
#include "api.h"
 
void ModDM::printName(){
	Printer *printer = new Printer();
 
	std::string str = "Je suis le mod DM!";
	printer->printString(&str);
}
 
Mod *createMod(){
	return new ModDM();
}
 
void destroyMod(Mod *p){
	delete p;
}
Pour compiler ce code j'ai aussi cree une "stub" fonction pour résoudre les dépendances :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
// stubApi.cpp
 
class __declspec(dllexport) Printer{
public:
	void printString(std::string *str){
		// stub function
	}
};
Lignes de compile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
CL /c /FostubMod.obj stubMod.cpp
LIB /DEF: stubMod.obj
CL /c dm.cpp
CL /LD dm.obj stubMod.lib
Au final j'obtien bien la DLL, mais lors du chargement par le programme principal, j’obtiens une erreur "stubMod.dll est introuvable" (ce qui est normal puisque qu'elle n'existe pas, les fonction sont dans le programme lui même)

Pouvez vous m'éclairer sur ce que je n'ai pas compris avec le fonctionnement des library Windows ? ou au moins me confirmer que ce que je cherche a faire est possible ?