Bonjour à tous.
Je suis confronté à un problème de dll depuis quelque temps. Je cherche à créer une dll sous visual studio.
Je doit faire un code générique en code c++ non managé que je doit ensuite importer dans un projet c++ managé
Pour ce faire, voila ce que j'ai fait :
Je crée donc un projet win32 --> dll -> projet vide.
Je crée une classe très simple :
Voici mon fichier Calculette.h
Voici mon fichier Calculette.cpp
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 #pragma once #include <iostream> #include <string> using namespace std; extern "C" class __declspec(dllexport) Calculette { private: double PI; public: Calculette(void); ~Calculette(void); int addition(int nbA, int nbB); double addPI(double nb); int soustraction(int nbA, int nbB); };
Ensuite j'ajoute à ma solution un nouveau projet de type console CLR ( Code managé ).
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 #include "Calculette.h" Calculette::Calculette(void) { this->PI = 3.14; } Calculette::~Calculette(void) { } int Calculette::addition(int nbA, int nbB) { return nbA + nbB; } double Calculette::addPI(double nb) { return nb + this->PI; } int Calculette::soustraction(int nbA, int nbB) { return nbB - nbA; }
Je copie la .dll ainsi que le fichier .lib généré par la compilation de ma dll à la source du projet.
Ensuite je place le code suivant :
Voici le fichier TestConsoleClass.cpp
J'essai ensuite de compiler le programme et voila ce que j'obtient comme erreur :
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 // TestConsoleClass.cpp : main project file. #include "stdafx.h" using namespace System; // Importation des éléments de ma DLL #pragma comment (lib, "FirstClassDll.lib") extern "C" class __declspec(dllexport) Calculette; int main(array<System::String ^> ^args) { Console::WriteLine(L"Lancement du programme"); // Calcul simple et écriture dans la console du résulat Calculette calc = new Calculette(); int resultat = calc->addition(2,3); Console::WriteLine(resultat); Console::ReadLine(); return 0; }
1 error C2079 'calc' uses undefined class 'Calculette'
2 error C2512 'Calculette': no appropriate default constructor available
3 error C2227 left of '->addition' must point to class/struct/union/generic type
Je pense que le problème viens du faite qu'il n'importe pas la classe comme il faudrait. J'ai vue sur internet après plusieurs recherche qu'il y a plusieurs solutions pour utiliser les dll. J'ai choisi d'opter pour la solution des __declspec(dllexport) qui est plus simple à implémenter.
Je vous remerci d'avance pour toute l'aide que vous pourrez m'apporter.
Partager