Bonjour/Bonsoir;

Voilà, je viens vers vous car je ne trouve aucune solution.

Voici mon "petit" problème: j'essaye de créer une fenêtre principale depuis une DLL. J'ai construis la DLL d'après un tuto que j'ai trouvé sur Internet (source MSDN: https://msdn.microsoft.com/fr-fr/library/ms235636.aspx). Elle fonctionne super bien. J'ai fais quelques modifications et tout ce passe toujours très bien.

Je vous poste les codes complet des deux fichiers de la DLL:

Le fichier header:

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
// anuCore.h
 
#ifdef ANUCORE_EXPORTS
#define ANUCORE_API __declspec(dllexport) 
#else
#define ANUCORE_API __declspec(dllimport) 
#endif
 
//Liste des fichiers inclu
 
#include <Windows.h>
 
//La class de base
 
namespace Anubisas
{
	// This class is exported from the MathFuncsDll.dll
	class clsWindows
	{
	public:
 
		static ANUCORE_API HWND acCreateW(HINSTANCE hInst);
	};
}
Et le fichier 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
// anuCore.cpp: Code de toutes les focntions de la DLL
 
#include "stdafx.h"
#include "anuCore.h"
#include <stdexcept>
 
using namespace std;
 
namespace Anubisas
{
 
	HWND clsWindows::acCreateW(HINSTANCE hInst)
	{
		HWND hWnd(NULL);
		WNDCLASS wc;
 
		wc.style = 0;
		wc.lpfnWndProc = NULL;
		wc.cbClsExtra = 0;
		wc.cbWndExtra = 0;
		wc.hInstance = hInst;
		wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
		wc.hCursor = LoadCursor(NULL, IDC_ARROW);
		wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);
		wc.lpszMenuName = NULL;
		wc.lpszClassName = L"MaWinClass";
 
		if (!RegisterClass(&wc)) return FALSE;
 
		hWnd = CreateWindow(L"MaWinClass", L"Titre", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInst, NULL);
 
		return hWnd;
	}
}
Tout compile très bien sans même le moindre warning...

Mais, avec l'aide des points d'arrêt, quand j'arrive à l’instruction CreateWindow, j'ai une violation d'acccès mémoir. mon IDE, VS 2015, me dit que la variable hWnd est toujours à NULL. Donc, le code plante au niveau de l'appel de CreateWindow.

Je vous place également le code de mes deux fichier de l'application de test.

Le fichier header:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
#pragma once
 
#include <Windows.h>
 
#include "anuCore.h"
Et le fichier 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
 
#include "main.h"
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
 
	//Point d'entré de l'application
 
	HWND hWnd(NULL);
 
	hWnd = Anubisas::clsWindows::acCreateW(hInstance);
 
	return 0;
}
Voilà, j'espère que la description de l'erreur vous permettra de m'aider car là, je ne comprend vraiment pas. Est ce un problème d'instance d'application?

Merci d'avoir prit le temps de lire ce post, et merci pour vos futures réponses.

Bien à vous, Anubisas.