Salut,
Je voudrais pouvoir exporter dans une DLL, si c'est possible, les fonctions et les objets du listing suivant. Car, je voudrais, par la suite pouvoir appeler à partir d'un autre langage, la fonction main(), exportéee dans la DLL.Le problème est qu'elle utilise des objets...
class a
{
public:
int var;
Fonction1(int nb); //Prototype de la fonction.
};
a *objet1; //Déclaration du pointeur vers l'objet.
int a::Fonction1(int nb)
{
objet1->var=nb;
return objet1->var;
}
int main()
{
objet1=new a; //Création de l'objet.
return objet1->Fonction1(8); //Retourne normalement 8.
}
//------------- FIN -----------------------
D'habitude, pour exporter mes fonctions dans une DLL ( ceci fonctionne), j'utilise le listing suivant, en créant un projet de type "MFC AppWizard (MFC)", sous Visual C++.
// Dans le fichier CPP
#include <windows.h>
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
DllExport void pascal test(void);
BOOL WINAPI DllEntryPoint (HINSTANCE hInst, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}
DllExport void pascal test(void)
{
MessageBox(NULL, "Ca marche !", "DLL Test", MB_OK);
}
// Dans le fichier .def
LIBRARY DLL_Test
CODE MOVEABLE DISCARDABLE
DATA SINGLE
EXPORTS
test()
// --------------- FIN ------------------
Comment fait-on pour que la fonction "test" puisse, par exemple, instancier, appeler des fonctions, ou encore modifier des variables d'une classe? Faut-il l'exporter?
Le seul moyen que j'ai trouvé pour remédier à cela est de compiler le programme en fichier EXE, puis d'appeler l'EXE avec des arguments ( du style : Result=shell("prog.exe arg1, arg2, arg3")), et d'ajouter un une boucle de récupération des arguments...Mais ce n'est pas très optimisé et surtout pas très propre!
Merci beaucoup, Clovis.