Rechercher : dans
Par :

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

Dernière réponse le 27 nov 2007 à 22:25:08 Sivaller, le 27 nov 2007 à 18:47:15 
 Signaler ce message aux modérateurs

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 ;

Configuration: Windows XP
Internet Explorer 6.0

1

kilian, le 27 nov 2007 à 20:08:07

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.

Répondre à kilian

2

Sivaller, le 27 nov 2007 à 22:21:04

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à

Répondre à Sivaller

3

 kilian, le 27 nov 2007 à 22:25:08

void  Ctestdll2::putstr(char *sy)

{

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

}

Répondre à kilian
Collection CommentÇaMarche.net