Bonjour a tous, voyez l'heure tardive a laquelle je vous parle et pour cause, je suis au japon pour l’été.
Je suis débutant en C++, langage que j'ai appris principalement par moi-même grâce a des tutoriels notamment.

J'ai pour projet de créer une GUI modulable a l'aide de DLL, pour qu'elle puisse gérer différents types de données. Je n'en suis pas encore la, j'en suis a la découverte du chargement dynamique des DLL. (j'ai déjà réussi a en charger par référence et tout le bazar)

Et donc mon problème est que la bibliothèque est bien chargée avec le LoadLibrary mais que les deux GetProcAddress censés charger les deux fonctions de ma DLL échouent et me renvoi l'erreur 127 (GetLastError): The specified procedure could not be found. (information précise, utile et pertinente n'est-ce pas -_-")

Donc, je me suis mis en quête un peu partout sur le net et sur ce forum en particulier d'information relative a mon problème, j'imagine qu'il y en a, mais bien que j’ai beaucoup cherche je n'ai rien trouve qui colle parfaitement a ma situation alors j'ai décide de créer un post. Je vous donne le code de ma DLL et la partie de mon main ou je charge la dll pour que vous puissiez m'aider au mieux: (je vous épargne les commentaires dont mes fichiers sont truffes étant donne que j'ai construit ces fichiers pour émailler un tutoriel)

1stDLL.h (qui est copie dans le répertoire de mon programme client)
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
 
#ifndef __HEADER__1ST_DLL__ 
#define __HEADER__1ST_DLL__
 
#include <windows.h> 
#include <tchar.h> 
 
namespace GUIMaker
{
	#ifdef  __cplusplus
		extern "C" {
	#endif
	__declspec(dllexport) HWND BuildButton( HINSTANCE hInstance,
											HWND parent, 
											TCHAR* text,
											int msg,
											int HPos = 0,
											int VPos = 0, 
											int bWidth = 100, 
											int bHeight = 30);
 
	__declspec(dllexport) HWND BuildWindow( HINSTANCE hInstance, 
											HWND parent, 
											TCHAR* title, 
											DWORD additionalCaract = 0, 
											int HPos = 100, 
											int VPos = 0, 
											int wWidth = 600, 
											int wHeight = 600);
 
	#ifdef  __cplusplus
					}
	#endif
}
 
#endif
1stDLL.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
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
 
#include "1stDLL.h"
 
HWND GUIMaker::BuildButton( HINSTANCE hInstance,
							HWND parent, 
							TCHAR* text,
							int msg,
							int HPos,
							int VPos, 
							int bWidth, 
							int bHeight)
{
	HWND button = CreateWindow( _T("BUTTON"), 
								text, 
								WS_VISIBLE | BS_PUSHBUTTON | WS_CHILD, 
								HPos, 
								VPos, 
								bWidth, 
								bHeight, 
								parent, 
								(HMENU)msg,
								hInstance, 
								NULL);
 
	return button;
}
 
HWND GUIMaker::BuildWindow( HINSTANCE hInstance, 
							HWND parent,
							TCHAR* title,
							DWORD additionalCaract,
							int HPos, 
							int VPos,
							int wWidth,
							int wHeight)
{
 
	HWND window;
	if (additionalCaract != 0)
	{
	window = CreateWindow(  _T("STATIC"),
							title,
							WS_VISIBLE | additionalCaract,
							HPos,
							VPos,
							wWidth,
							wHeight,
							parent, 
							NULL,
							hInstance,
							NULL);
	}
 
	else window = CreateWindow( _T("MDICLIENT"), 
								title,
								WS_VISIBLE | WS_OVERLAPPEDWINDOW,
								HPos,
								VPos,
								wWidth,
								wHeight,
								parent,
								NULL,
								hInstance,
								NULL);
 
	return window;
 
}
enfin le bout de code ou j'essaie de charger dynamiquement mes fonctions dans mon fichier Exercise2.cpp (mon fichier MyDLL.dll seul se trouve dans le dossier C:/Windows/sysWOW64/ peut-être que ça a son importance)
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
#include "1stDLL.h"
 
[...]
 
typedef HWND (CALLBACK* DLLFUNC1)(HINSTANCE, HWND, TCHAR*, DWORD, int, int, int, int); // for BuildWindow function
typedef HWND (CALLBACK* DLLFUNC2)(HINSTANCE, HWND, TCHAR*, int, int, int, int, int); // for BuildButton function
 
[...]
 
	//loading the DLL and its 2 functions
 
	 DLLFUNC1 DLLFunc1;			// Function pointer for BuildWindow function
	 DLLFUNC2 DLLFunc2;		    // Function pointer for BuildButton function
 
	HMODULE hDLL = LoadLibrary( _T("MyDLL.dll") );
 
	if (hDLL != NULL)
	{
	   DLLFunc1 = (DLLFUNC1) GetProcAddress( hDLL, "GUIMaker::BuildWindow");
	   DLLFunc2 = (DLLFUNC2) GetProcAddress( hDLL, "GUIMaker::BuildButton");
	   DWORD problem = GetLastError();
 
	   if (!DLLFunc1)
	   {
		  // handle the error
		  FreeLibrary(hDLL); 
		  return NULL;
	   }
	   if (!DLLFunc2)
	   {
		  // handle the error
		  FreeLibrary(hDLL);       
		  return NULL;
	   }
	   else
	   {
		HWND Question = DLLFunc1(   hInstance,
									hWnd,
									SURPRISE,
									WS_CHILD,
									105,
									130,
									300,
									50);
 
		HWND YesButton = DLLFunc2(  hInstance, 
									hWnd,
									_T("Yes"),
									WM_YESBUTTON,
									200,
									200,
									100,
									30);
 
		FreeLibrary(hDLL);
		}
 
	}
PS: j'ai défini WM_YESBUTTON dans mon fichier ressource, idem pour SURPRISE, le problème ne vient pas d'eux puisque ce code marche dans un autre projet ou j'ai utilise les références pour linker ma DLL

PS2: pour le code de chargement dynamique je me suis servis de la documentation officielle de VC++ 2010 express sur msdn.microsoft.com/chaipuquoi

PS3(comme ça j'ai fait toute la famille ^-^): désolé pour l'indentation ratée par le Ctrl+C Ctrl+V j'ai la flemme de la refaire a la main et désolé pour le manque d'accent dans mon texte, je travaille sur un clavier Mac et je connais pas les raccourcis