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
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);
};
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
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;
}
Ensuite j'ajoute à ma solution un nouveau projet de type console CLR ( Code managé ).
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
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;
}
J'essai ensuite de compiler le programme et voila ce que j'obtient comme erreur :

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.