Class avec constructeur personnalisé dans une DLL: error LNK2001

Signaler
Messages postés
5
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
15 janvier 2009
-
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
Bonjour à vous cher internaute. J'utilise VC++ 2008 et je suis en train d'essayer de créer
une DLL d'une simplicité inégalée. Seulement, un problème se pose: une erreur LNK2001!
Pour faire une histoire courte, ma DLL doit absolument comporter un constructeur personnalisé.
Ce constructeur, comme vous le savez sans doute, me permet d'enregistrer certains
paramètres indispensables au bon fonctionnement de l'objet que représente ma class.

Après plusieurs tentatives, j'ai décidé de créer une class simple pour mettre en évidence
de certaines erreurs dont ma class utile fait face. Voici un peu de code:

CPPDLL.H
-------------------------------------------------------------------------------------
#ifndef CPPDLL_H

#define CPPDLL_H

extern
"C"
class mathematique

{  
   private:
      int number
;   public

:
      mathematique
(int a
);
      void setnumber
(int a
)  { number=a;}
      int cube
();
};

#endif
//CPPDLL_H

CPPDLL.CPP
-------------------------------------------------------------------------------------
#include
"cppdll.h"

mathematique
::mathematique
(int a
)
{
   number
= a
;
}

int mathematique
::cube
()
{
     return number
* number
* number
;
}CPPDLL.DEF
-------------------------------------------------------------------------------------
EXPORTS
      mathematique
      setnumber
      cube
-------------------------------------------------------------------------------------

Donc, le problème ici est que j'obtiens 3 erreurs:

1) cppdll.def : error LNK2001: unresolved external symbol mathematique
2) cppdll.def : error LNK2001: unresolved external symbol setnumber
3) .\Debug/cppdll.lib : fatal error LNK1120: 2 unresolved externals

Problème 1:   L'erreur pour laquelle je demande votre aide! J'ai recherché beaucoup, mais je ne trouve rien...
Problème 2:   Pour régler cette erreur, je dois modifier certaines choses:
                            CPPDLL.H :   void setnumber(
int a) <strike>{ number=a;</strike><strike>}</strike>;
                            CPPDLL.CPP: void setnumber(
int a)  { number=a;}
                      Bien que je sache comment remédier à cette erreur, j'aimerais bien la comprendre...
Problème 3:   Si on règle 1 et 2, celui-ci fera de même!!

J'espère avoir été assez claire dans mes explications pour vous, cher étrangé, puissiez m'aider dans mon incompréhention. Merci de votre aide!

2 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Je vois 2 problèmes possibles.
Le premier, je ne suis pas sur: pourquoi mettre un extern 'C' alors que tu as une classe dans ta dll donc forcement C++?

Pour le second, il faut mettre une signature particulière à toutes les fonctions que tu veux appeler depuis ton programme: __declspec(dllexport) int mathematique
::cube
(){...}

A+
____________________________________________________________________________
Mon site internet :  http://ImAnalyse.free.fr
http://ImAnalyse.free.fr
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Salut,

A ma connaissance, il n'est pas possible de créer des objets à partir d'une classe contenue dans une dll.

Shell