Comment appeller une méthode d'une classe d'une dll?
Je souhaite faire une dll, en C++, avec VC++6.0 (+entreprise edition+visual fortran 6.1.0) et pouvoir utiliser les objets définis dans la dll avec une application.
J'ai bien noté dans :
http://c.developpez.com/faq/vc/?page...keDLLExtension
Comment faire une DLL d’extensions ?
Une DLL d’extensions permet l’export de classes complètes que le client peut instancier et même dériver.
Note : L’utilisation d’une DLL d’extensions impose l’utilisation des MFC en DLL partagées.
Mais voila je souhaiterais éviter d'utiliser MFC pour être au maximum portable.
Mon visual studio pour un nouveau projet me propose Win32 Dynamic-Link Library,
et je peux choisir A dll that exports some symbols
Si j'appelle mon projet dll2
dans le fichier dll2.h j'ai :
Code:
1 2 3 4 5 6
| // This class is exported from the dll2.dll
class DLL2_API CDll2 {
public:
CDll2(void);
// TODO: add your methods here.
}; |
Tout se compile bien, et se link bien avec l'application.
Si maintenant j'ajoute une méthode testout et une variable itest:
dans dll.h:
Code:
1 2 3 4 5 6 7 8 9
| // This class is exported from the dll2.dll
class DLL2_API CDll2 {
public:
CDll2(void);
// TODO: add your methods here.
int testout();
private:
int itest;
}; |
dans dll2.cpp:
Code:
1 2 3
| int CDll2::testout()
{ return(itest);
} |
Tout se compile bien, et se link bien avec l'application (Win32 console application) en faisant l'include qui va bien et en ajoutant le dll2.lib aux librairies.
Voici mon application:
Code:
1 2 3 4
| int main(int argc, char* argv[])
{ DLL2_API CDll2 Objet1;
return 0;
} |
Par contre dès que j'appelle la methode,
Code:
1 2 3 4 5
| int main(int argc, char* argv[])
{ DLL2_API CDll2 Objet1;
Objet1.testout();
return 0;
} |
Je n'arrive pas à me débarrasser de :
error LNK2001: unresolved external symbol "__declspec(dllimport) class CDll2 Objet1
Dois-je me resoudre à passer les infos par des fonctions en C?
Ce qui me semble curieux c'est qu'avec Win32 Dynamic-Link Library Visual me propose bien une classe, mais que je n'aurais pas le droit d'utiliser!!!
Ou alors j'ai loupé un concept!
Merci d'avance pour votre aimable aide.