Problème de classe non static

cs_Terminator59140 Messages postés 4 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 22 juillet 2008 - 16 juin 2008 à 23:15
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 18 juin 2008 à 22:14
Bonjour tous le monde! J'ai un problème un peu énervant si je eut me permette. J'utilise Visual Studio 2008 et je créer un projet en c++. Le porjet est une dll vide, de l'application Win32. J'avais jamais trop compris comment on créer une dll en c++, mais maintenant je sais un peut près.

Mais voici mon problème. Dans ma solution il y a deux projets vide, le premier (le principale) est une dll qui me permettra de faciliter le développement de mes applications. La deuxième est un test pour voir si la dll fonctionne sans erreur. Le but que je suis en train de faire est:

code dll: (code .hpp)

#ifndef CODEDLL_HPP
#define CODEDLL_HPP
namespace Dansdll
{
class Init
{
public:
     Init();
     ~Init();

void Initialisation();
};
};
#endif

code dll: (code .cpp)

namespace Dansdll
{
void Init::Initialisation()
{
 // Il n'y a rien dedans car c'est juste pour un test
}
};

code 2nd Projet: (code .hpp)

#ifndef main_HPP
#define main_HPP

class Test
{
public:
    Test();
    ~Test();

    static void DllInit();
};
#endif

code 2nd Projet (code .cpp)

#include

#include "main.hpp"
#include "codedll.hpp"

using namespace Dansdll;

int main(void)
{
    Test::DllInit();
}
void Test::DllInit()
{
    std::cout << "Initialisation" << std::endl;
    Init::Initialisation();          // C'est la ou il y a une erreur.**
}

** Erreur    1    error C2352: 'Dansdll::Init::Initialisation' : appel non conforme d'une fonction membre non static

La voilà mon problème. J'ai pensée à mettre static avant void de Initialisation();

Mais c'est du charabia et l'aide msdn ne m'apporte pas la solution.

Erreur    2    error LNK2019: symbole externe non résolu "public: static void __cdecl Dansdll::Init::Initialisation(void)" (?Initialisation@Init@Dansdll@@SAXXZ) référencé dans la fonction "public: static void __cdecl Test::DllInit(void)" (?DllInit@Test@@SAXXZ)    main.obj

Erreur    3    fatal error LNK1120: 1 externes non résolus

7 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 juin 2008 à 23:48
Tu devrais relire un peu de doc. Appeler une fonction non static sans objet, ca n'a pas de sens.

"Mais c'est du charabia et l'aide msdn ne m'apporte pas la solution."
=> Mais l'erreur est radicalement différente. Avant il s'agissait d'un problème de compilation. Il s'agit maintenant d'un pb de link.

Il faut dire au compilo ce qu'il doit exporter dans la dll.

class __declspec(dllexport) Init
{
...
0
cs_Terminator59140 Messages postés 4 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 22 juillet 2008
17 juin 2008 à 00:25
Même si tu as raison sa ne change pas grand chose car i l y a toujours le problème de non static et dans ma 2nd application , j'ai rajouté

__declspec(dllimport), mais j'ai un message d'avertissement du type

Avertissement    1    warning C4091: '__declspec(dllimport)' : ignoré à gauche de 'GRAUPEEN::Screen' quand aucune variable n'est déclarée
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
17 juin 2008 à 19:23
public:
     Init();
     ~Init();

static void Initialisation();
};
0
cs_Terminator59140 Messages postés 4 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 22 juillet 2008
17 juin 2008 à 21:37
C'est en train de former une boucle puisque je retombe sur l'erreur 2:

Erreur    2    error LNK2019: symbole externe non
résolu "public: static void __cdecl
Dansdll::Init::Initialisation(void)"
(?Initialisation@Init@Dansdll@@SAXXZ) référencé dans la fonction
"public: static void __cdecl Test::DllInit(void)"
(?DllInit@Test@@SAXXZ)    main.obj
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 juin 2008 à 01:14
T'as rajouté la librairie .lib associée à ta dll dans ton projet ?
0
cs_Terminator59140 Messages postés 4 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 22 juillet 2008
18 juin 2008 à 18:08
Non je ne l'ai pas fait, mais comment on fait? Comme c'est la première fois que je travaille avec une dll.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 juin 2008 à 22:14
Comme avec une librairie static, faut ajouter dans les librairies le petit fichier que visual a généré en meme temps que la dll.
0
Rejoignez-nous