Utiliser une classe d'une .DLL, pb de linker
Sivaller
Messages postés
160
Statut
Membre
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
Bonjour,
J'essaye d'utiliser une classe d'une library avec seulement Loadlibrary.
Le compilo me jette avec l'erreur suivante :
useclass error LNK2019: symbole externe non résolu "__declspec(dllimport) public: void __thiscall Ctestdll::putstr(char *)" (__imp_?putstr@Ctestdll@@QAEXPAD@Z) référencé dans la fonction _main
Le lien de ma source :
http://pagesperso-orange.fr/sivaller/shareclass.zip
Merci ;
J'essaye d'utiliser une classe d'une library avec seulement Loadlibrary.
Le compilo me jette avec l'erreur suivante :
useclass error LNK2019: symbole externe non résolu "__declspec(dllimport) public: void __thiscall Ctestdll::putstr(char *)" (__imp_?putstr@Ctestdll@@QAEXPAD@Z) référencé dans la fonction _main
Le lien de ma source :
http://pagesperso-orange.fr/sivaller/shareclass.zip
Merci ;
A voir également:
- Utiliser une classe d'une .DLL, pb de linker
- Comment utiliser chromecast sur tv - Guide
- Utiliser une tablette comme ecran pc - Guide
- Utiliser iphone comme webcam - Guide
- Impossible d'utiliser ce numéro de téléphone pour la validation - Forum Gmail
- Comment utiliser teamviewer - Guide
3 réponses
Non, en fait je ne crois que c'est durant l'import de ta fonction que ça ne va pas.
C'est le fait que tu as défini cette classe:
Plus loin tu fais:
Tu appelles la méthode Ctestdll::putstr dans Ctestdll2::putstr
Le soucis c'est que Ctestdll::putstr n'est implémentée nulle part, on a juste son interface mais pas son contenu.
De deux choses l'une:
_ Soit tu donnes un implémentation à cette méthode
_ Soit tu la déclares virtuelle pure (virtual void putstr(char *sy) = 0;) et tu n'appelles pas cette méthode. Ca signifie que les enfants de Ctestdll seront obligés d'implémenter cette fonction comme tu le fais avec Ctestdll2 mais que Ctestdll ne sera pas instanciable et que tu ne pourras pas appeler sa fonction putstr.
C'est le fait que tu as défini cette classe:
class Ctestdll {
public:
Ctestdll(void);
virtual void putstr(char *sy);;
char *s;
// TODO : ajoutez ici vos méthodes.
};
Plus loin tu fais:
class Ctestdll2 : Ctestdll{
public:
void putstr(char *sy);
// TODO : ajoutez ici vos méthodes.
};
void Ctestdll2::putstr(char *sy)
{
printf("héhé");
Ctestdll::putstr(sy);
}
Tu appelles la méthode Ctestdll::putstr dans Ctestdll2::putstr
Le soucis c'est que Ctestdll::putstr n'est implémentée nulle part, on a juste son interface mais pas son contenu.
De deux choses l'une:
_ Soit tu donnes un implémentation à cette méthode
_ Soit tu la déclares virtuelle pure (virtual void putstr(char *sy) = 0;) et tu n'appelles pas cette méthode. Ca signifie que les enfants de Ctestdll seront obligés d'implémenter cette fonction comme tu le fais avec Ctestdll2 mais que Ctestdll ne sera pas instanciable et que tu ne pourras pas appeler sa fonction putstr.
virtual void putstr(char *sy)=0; marche pas, donne la même chose :
useclass error LNK2019: symbole externe non résolu "public: virtual void __thiscall Ctestdll::putstr(char *)" (?putstr@Ctestdll@@UAEXPAD@Z) référencé dans la fonction "public: virtual void __thiscall Ctestdll2::putstr(char *)" (?putstr@Ctestdll2@@UAEXPAD@Z)
voilà
useclass error LNK2019: symbole externe non résolu "public: virtual void __thiscall Ctestdll::putstr(char *)" (?putstr@Ctestdll@@UAEXPAD@Z) référencé dans la fonction "public: virtual void __thiscall Ctestdll2::putstr(char *)" (?putstr@Ctestdll2@@UAEXPAD@Z)
voilà