Bonjour,

Cela fait quelques jours que je cherche le moyen d'exporter une classe c++ contenant seulement de la donn�e (chaines de caract�res, entiers...) dans une dll.

Quelques contraintes, parce que sinon, �a serait trop facile :
- La dll doit �tre utilisable par du delphi, du vb, ... donc me dites pas d'importer le .h dans l'appli qui utilise la dll, c'est pas possible.
- L'objet que je veux exporter contient d'autres objets (que je vais devoir exporter aussi)

Ou j'en suis aujourd'hui :
- J'ai vu qu'on pouvait faire du __declspec(dllexport) mais je dois avoir le .h pour utiliser ma classe -> je veux juste une dll
- J'ai essay� avec un .def (cr�� � partir d'infos trouv�es dans le .map) mais j'ai l'impression que les classes n'y sont pas. J'ai le constructeur, le destructeur mais pas la classe en elle m�me. Ou alors je n'ai pas compris comment l'importer apr�s.
- Voil� le code simplifi� :

[DLL]
Ma classe de donn�e
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
#undef AFX_DATA
#define AFX_DATA AFX_EXT_DATA
 
#include <string>
 
class Plop
{
public:
	Plop(void);
	~Plop(void);
 
public:
	std::string* plopy;
};
 
#undef AFX_DATA
#define AFX_DATA
une fonction (que j'exporte �galement) :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
Plop* GiveMePlop()
{
	return new Plop();
}
Mon fichier .def :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
LIBRARY      "PlopAPI"
 
EXPORTS
	GiveMePlop @1
	Plop = ??0Plop@@QAE@XZ @2
[APPLI]
ma classe qui utilise la dll :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
typedef int (*GiveMePlopFunc)(); /* je voudrais pas du int mais du Plop* */
HINSTANCE hInstLibrary = LoadLibrary(_T("Plop.dll"));
if (hInstLibrary)
{
	GiveMePlopFunc plopFunc = (GiveMePlopFunc)GetProcAddress(hInstLibrary,"GiveMePlop");
	/* ici je voudrais r�cup�rer mon objet plop : Plop* plop = */ plopFunc();
}
J'ai l'impression qu'il manque pas grand chose pour que ca marche ou bien que c'est impossible mais dans les deux cas, je veux bien savoir comment faire.

Merci d'avance