Bonjour, j'essaie d'afficher une image récupérer d'une caméra IP dans mon programme mais je rencontre un problème au niveau de l'utilisation de la fonction OleLoadPicture().

Il me met :


Ce qui correspond à la ligne GlobalFree(hgbl);
Normalement il ne devrait même pas rentrer dedans, donc il y à une erreur plus haut je pense mais où...

Mon code :

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
	HRESULT hr;
	CoInitialize(0);
	HBITMAP hbmp_dst = 0;
 
	SIZE_T nSize = this->tailleImage;
 
	// copie image jpeg dans global
	HGLOBAL hgbl = (HGLOBAL)GlobalAlloc(GMEM_FIXED, nSize);
	memcpy(hgbl, this->bufImage, nSize);
 
	// création du stream d'échange
	IStream* stream = 0;
	// image jpeg dans global dans stream
	hr = CreateStreamOnHGlobal(hgbl, TRUE, &stream);
	if(!SUCCEEDED(hr) || !stream) { // si erreur libération des objets déja crées
		GlobalFree(hgbl);
		CoUninitialize();
		return false;
	} else {
		// création d'une 'picture'
		IPicture* picture = 0;
		// conversion stream vers picture
		hr = OleLoadPicture(stream, nSize, FALSE, IID_IPicture, (void**)&picture);
		if(!SUCCEEDED(hr) || !picture) { // si erreur libération des objets déja crées
			stream->Release();
			GlobalFree(hgbl);
			CoUninitialize();
			return false;
		} else {
			HBITMAP hbmp_src;
			// recuperation du handle de la 'picture'
			picture->get_Handle((OLE_HANDLE *)&hbmp_src);
 
			// recuperation du handle du bitmap de la 'picture'
			BITMAP bmp;
			GetObject(hbmp_src, sizeof bmp, &bmp);
			// bmp est le bitmap resultant mais son pointeur vers le contenu pointe vers le contenu de 'picture'
			// comme on va dechargé la 'picture' on copie dans une autre zone memoire
			hbmp_dst = (HBITMAP)CopyImage(hbmp_src, IMAGE_BITMAP, 0, 0, 0);
 
			picture->Release();
			stream->Release();
			GlobalFree(hgbl);
			CoUninitialize();
		}
	}
	this->hbmp = hbmp_dst;