IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

VC++ .NET Discussion :

OleLoadPicture pose probl�me


Sujet :

VC++ .NET

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Par d�faut OleLoadPicture pose probl�me
    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;

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ce code utilise mal GlobalAlloc() (GMEM_FIXED retourne un pointeur, pas un handle), mais �a ne devrait pas pour autant faire �chouer la suite du code...

    PS: Plut�t que !SUCCEEDED(hr), tu devrais utiliser FAILED(hr), qui est l'�quivalent.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. CFormView::OnIntialUpdate() pose probl�me
    Par jacklafrip dans le forum MFC
    R�ponses: 1
    Dernier message: 26/09/2006, 15h37
  2. caract�re \ pose probl�me
    Par questionneuse dans le forum SQL Proc�dural
    R�ponses: 2
    Dernier message: 11/07/2006, 16h25
  3. Un cast de SmartPointer qui pose probl�me
    Par Higestromm dans le forum C++
    R�ponses: 3
    Dernier message: 13/10/2005, 10h25
  4. jointure externe avec un where, me pose probl�me!
    Par Danae dans le forum Langage SQL
    R�ponses: 3
    Dernier message: 18/07/2005, 17h37
  5. R�ponses: 3
    Dernier message: 17/05/2005, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo