Utiliser une classe d'une .DLL, pb de linker

Sivaller Messages postés 160 Statut Membre -  
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 ;

3 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
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:
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.
0
Sivaller Messages postés 160 Statut Membre
 
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à
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
void  Ctestdll2::putstr(char *sy)

{

	printf("héhé");
=>Il faut aussi supprimer cette ligne:	Ctestdll::putstr(sy);

}
0