Salut à tous

Je suis en train de développer une DLL et j'ai eu des soucis pour l'utiliser. Donc je suis revenu à quelque chose de très basic pour essayer de trouver ce qui ne va pas.

J'ai pris l'exemple de la FAQ du Visual C++

MaDLL.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
 
#ifdef _WINDLL
#define DLLDEC __declspec(dllexport)
#else
#define DLLDEC __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C"
{
#endif
DLLDEC int TestDll();
#ifdef __cplusplus
}
#endif
MaDLL.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
#include "MaDLL.h"
 
 
int DLLDEC TestDll()
{
 return 2010;
}
Tout ce compile sans souci et la DLL est crée. Je la teste avec le programme suivant:
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
 
// TestMaDLLDlg.cpp : fichier d'implémentation
//
 
#include "stdafx.h"
#include "TestMaDLL.h"
#include "TestMaDLLDlg.h"
#include "MaDLL.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
 
// boîte de dialogue CAboutDlg utilisée pour la boîte de dialogue 'À propos de' pour votre application
 
class CAboutDlg : public CDialog
{
public:
	CAboutDlg();
 
// Données de boîte de dialogue
	enum { IDD = IDD_ABOUTBOX };
 
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge de DDX/DDV
 
// Implémentation
protected:
	DECLARE_MESSAGE_MAP()
};
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
 
 
// boîte de dialogue CTestMaDLLDlg
 
 
 
 
CTestMaDLLDlg::CTestMaDLLDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestMaDLLDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CTestMaDLLDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_RESUTEST, m_ResuTest);
}
 
BEGIN_MESSAGE_MAP(CTestMaDLLDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BTNTEST, &CTestMaDLLDlg::OnBnClickedBtntest)
END_MESSAGE_MAP()
 
 
// gestionnaires de messages pour CTestMaDLLDlg
 
BOOL CTestMaDLLDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
 
	// Ajouter l'élément de menu "À propos de..." au menu Système.
 
	// IDM_ABOUTBOX doit se trouver dans la plage des commandes système.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);
 
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
 
	// Définir l'icône de cette boîte de dialogue. L'infrastructure effectue cela automatiquement
	//  lorsque la fenêtre principale de l'application n'est pas une boîte de dialogue
	SetIcon(m_hIcon, TRUE);			// Définir une grande icône
	SetIcon(m_hIcon, FALSE);		// Définir une petite icône
 
	// TODO : ajoutez ici une initialisation supplémentaire
 
	return TRUE;  // retourne TRUE, sauf si vous avez défini le focus sur un contrôle
}
 
void CTestMaDLLDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}
 
// Si vous ajoutez un bouton Réduire à votre boîte de dialogue, vous devez utiliser le code ci-dessous
//  pour dessiner l'icône. Pour les applications MFC utilisant le modèle Document/Vue,
//  cela est fait automatiquement par l'infrastructure.
 
void CTestMaDLLDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // contexte de périphérique pour la peinture
 
		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 
		// Centrer l'icône dans le rectangle client
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
 
		// Dessiner l'icône
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}
 
// Le système appelle cette fonction pour obtenir le curseur à afficher lorsque l'utilisateur fait glisser
//  la fenêtre réduite.
HCURSOR CTestMaDLLDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}
 
 
void CTestMaDLLDlg::OnBnClickedBtntest()
{
	// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
	int x=TestDll();
	//int x=fnMaDLL2();
	if (x==2010)
		m_ResuTest.SetWindowTextA("Tout est OK");
	else
		m_ResuTest.SetWindowTextA("Pas glop");
}
Et je me retrouve avec l'erreur suivante:

Exception non gérée à 0x77e9bcb1 dans TestMaDLL.exe*: 0xC06D007E: Module not found.

Je pense qu'il manque quelque chose quelque part mais je ne vois pas où

Si quelqu'un a une idée.

J'utilise Visual Studio 2005 SP1