Bonjour,
Je viens vers vous suite à un problème que je rencontre avec un projet suite à la série "Réalisation d'un moteur 3D en C++".
J'ai voulu réaliser ce tuto pour mon moteur en partant du tous début pour mieux comprendre et sans compiler directement les sources du tuto.
J'ai donc commencer à créer un projet dll qui contient le moteur et un second projet win32 pour tester l'import de la dll.
Tous se passe bien pour l'export mais je rencontre un problème au niveau je pense de l'import.
voici l'erreur que je reçois :
voici le code de ma classe C_Test.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Erreur 3 error LNK2019: symbole externe non résolu "public: __thiscall C_Test::C_Test(void)" (??0C_Test@@QAE@XZ) référencé dans la fonction "public: static class C_Test & __cdecl SilverEngine::C_Singleton<class C_Test>::Instance(void)" (?Instance@?$C_Singleton@VC_Test@@@SilverEngine@@SAAAVC_Test@@XZ) C:\Users\ksta\Desktop\DLL\Projets\TestDLL\Main.obj TestDLL
Et voici le code de C_Test.cpp (j'ai enlever le code dans les fonction pour pas que cela agrandisse le message):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #include <Core/C_IWin32Application.h> #include <Renderers/C_IRenderer.h> #include <Utilities/Debug/Loggers/C_ILogger.h> #include <Utilities/Debug/Loggers/C_LoggerFile.h> #include <windows.h> #include <string> using namespace SilverEngine; class C_Test : public C_IWin32Application, public C_Singleton<C_Test> { friend class C_Singleton<C_Test>; public: C_Test(); ~C_Test(); void initialize(); void createWindow(int p_posX, int p_posY, int p_width, int p_height); void draw(); LRESULT CALLBACK WindowProc(HWND Hwnd, UINT Message, WPARAM WParam, LPARAM LParam); static LRESULT CALLBACK GlobalWindowProc(HWND Hwnd, UINT Message, WPARAM WParam, LPARAM LParam); void start(); void stop(); };
Et la dernière la class C_Singleton qui est la même que le tuto :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 #include "C_Test.h" C_Test::C_Test(){} C_Test::~C_Test(){} void C_Test::initialize(){ } void C_Test::createWindow(int p_posX, int p_posY, int p_width, int p_height){ } void C_Test::draw(){ } LRESULT CALLBACK C_Test::GlobalWindowProc(HWND p_hwnd, UINT p_message, WPARAM p_wParam, LPARAM p_lParam){ } LRESULT CALLBACK C_Test::WindowProc(HWND p_hwnd, UINT p_message, WPARAM p_wParam, LPARAM p_lParam){ } void C_Test::start(){ } void C_Test::stop(){ }
Dans les propriétées du projet TestDLL j'ai bien référencer le projet du moteur et également rajouter les dépendances supplémentaire vers le dossier du moteur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 #pragma once #include <cstdlib> /** * \namespace SilverEngine */ namespace SilverEngine{ /** * \class C_Singleton */ template <class T> class C_Singleton{ /** * \publicsection */ public: //---------------------------------------------------------------- // Renvoie l'instance unique de la classe //---------------------------------------------------------------- static T& Instance(){ if (!Inst) Inst = new T; return *Inst; } //---------------------------------------------------------------- // Renvoie le pointeur de l'instance unique de la classe //---------------------------------------------------------------- static T* InstancePtr(){ if (!Inst) Inst = new T; return Inst; } //---------------------------------------------------------------- // Détruit l'instance unique de la classe //---------------------------------------------------------------- static void Destroy(){ delete Inst; Inst = NULL; } /** * \protectedsection */ protected: //////////////////////////////// // CONSTRUCTORS / DESTRUCTOR C_Singleton() {} ~C_Singleton() {} /** * \privatesection */ private: //---------------------------------------------------------------- // Données membres //---------------------------------------------------------------- static T* Inst; // Instance de la classe //---------------------------------------------------------------- // Copie interdite //---------------------------------------------------------------- C_Singleton(C_Singleton&); void operator =(C_Singleton&); }; // Initialisation du singleton template <class T> T* C_Singleton<T>::Inst = NULL; }
Est-ce que quelqu'un serait d’où sa pourrai venir et/ou si il à rencontrer le même problème?
je vous remercie d'avance.
Partager