begin process at 2012 05 29 05:44:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

MFC

 > 

extraire miniatures vista - visual C++ - classe abstraite - appel d'une fonction membre non static


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

extraire miniatures vista - visual C++ - classe abstraite - appel d'une fonction membre non static

mercredi 24 septembre 2008 à 23:48:15 | extraire miniatures vista - visual C++ - classe abstraite - appel d'une fonction membre non static

michelscofield

/*
Bonjour à tous,
J'ai quelques problèmes sur ce petit programme console pour vista, nottament au niveau de Programmation objet...

Programme en console en c++ qui sauvegarde une copie de la miniature d'un fichier crée par l'explorateur de vista. (travaux sous visual c++ 2008 - ceci est une source utilisable)

Le programme consiste à
- "ouvrir" un fichier              //ça a l'air de marcher deja
- récupérer la miniature      // je n'arrive pas a creer un nouvel objet IThumbnailCache avec new ou bien appeller la fonction directement par IThumbnailCache::GetThumbnail(); Ici j'ai un pointeur et n'arrive pas à l'initialiser. J'ai fait que du C mais tres peu d'objet avec C++ et java, je ne sais pas quoi faire pour appeller correctement la fonction dans ce contexte.
- save as .bmp//je n'ai pas pu vérifier cette fonction toute faite, (trouvée sur http://sarathc.wordpress.com/2007/03/14/how-to-save-bitmap-to-file/) Je pense que  le ISharedBitmap peut etre ecrit ainsi dans un fichier bmp.

Ceci est la source du fichier.

Merci de votre aide !
michielscofield
*/

#include "stdafx.h"
#include <shobjidl.h>//shell item
#include <thumbcache.h>//thumbnail
#include <windows.h>
#include <stdio.h>
using namespace System;

int SaveBitmapToFile( BYTE* pBitmapBits, LONG lWidth, LONG lHeight,WORD wBitsPerPixel, LPCTSTR lpszFileName );


int main(array<System::String ^> ^args)
{
    //creer un Item de pic.bmp
   HRESULT res;
   IShellItem *psi;
   res = SHCreateItemFromParsingName(L"C:\\Users\\pascal\\Documents\\Visual Studio 2008\\Projects\\test console\\pic.bmp", NULL, IID_PPV_ARGS(&psi));if (res!=S_OK)
   if (res!=S_OK)   
   {
              printf("error : SHCreateItemFromParsingName");
                return EXIT_FAILURE;
    }
  
//recuperer la thumbnail (miniature)
 ISharedBitmap *ppvThumb;
 WTS_CACHEFLAGS pOutFlags;
 WTS_THUMBNAILID pThumbnailID;
 
//plante à partir d'ici
 IThumbnailCache *T;
 res=IThumbnailCache::GetThumbnail(psi,128,WTS_FORCEEXTRACTION,&ppvThumb,&pOutFlags,&pThumbnailID );//|WTS_EXTRACTDONOTCACHE too?
 
 if (res!=S_OK)   
    {       
              printf("error : GetThumbnail");
                return EXIT_FAILURE;
    }
 if (pOutFlags==WTS_LOWQUALITY)
        printf("warning : Low quality");



//sauvegarde (fonction plus bas)
res=SaveBitmapToFile( (BYTE)(ppvThumb),64,64,24, L"C:\\Users\\pascal\\Documents\\Visual Studio 2008\\Projects\\test console\\thumb_pic.bmp");
 if (res!=0)
   {
              printf("error : Save");
   }

    return EXIT_SUCCESS;
}



int SaveBitmapToFile( BYTE* pBitmapBits, LONG lWidth, LONG lHeight,WORD wBitsPerPixel, LPCTSTR lpszFileName )
{
Source de cette fonction :
voir
http://sarathc.wordpress.com/2007/03/14/how-to-save-bitmap-to-file/
}

jeudi 25 septembre 2008 à 13:03:58 | Re : extraire miniatures vista - visual C++ - classe abstraite - appel d'une fonction membre non static

rt15

Membre Club Administrateur CodeS-SourceS

Salut,

Je n'ai pas Vista ici , et je ne connais pas thumbcache.h. Cependant...


 IThumbnailCache *T;
 res=IThumbnailCache::GetThumbnail(psi,128,WTS_FORCEEXTRACTION,&ppvThumb,&pOutFlags,&pThumbnailID );//|WTS_EXTRACTDONOTCACHE too?


Ici, tu déclare un pointeur sur un IThumbnailCache, puis tu ne t'en sert pas. Ensuite, tu semble chercher à accèder à la méthode GetThumbnail comme si elle était statique.

Plus que du C++, c'est du COM dont il s'agit ici. IThumbnailCache correspond à une interface. Il faut que tu instancie un objet qui implémente cette interface. Pour cela, il faut en faut que tu fasses comme ça, mais avec ton interface. Ca doit donner quelque chose comme ça :



IThumbnailCache *t;
HRESULT res;

// Initialisation de COM si ce n'est déjà fait
res = CoInitialize(NULL);

if (SUCCEEDED(res))
{
   
    res = CoCreateInstance(CLSID_ThumbnailCache, NULL, CLSCTX_INPROC_SERVER, IID_IThumbnailCache, (void**)&t);
   
    if (SUCCEEDED(res))
    {
        // Décrémentation du compteur de référence pour libération
        t->Release();
    }
}


Pour le CLSCTX, j'ai un doute.

Ca va mettre quelque chose au bout de ton pointeur. En plus d'implémenter IThumbnailCache, l'objet instancier implémente IUnknown. IUnknown gère un compteur de référence. Il faut l'incrémenté lorsque l'on met un nouveau pointeur sur l'objet, et le décrémenter lorsque l'un de ces pointeurs disparait. Quand il n'y a plus de pointeur sur l'objet, Release libère l'objet. C'est un mécanisme supposer aider à libérer un objet au bon moment tout en offrant la possibilité d'avoir un grand nombre de pointeurs dessus.

jeudi 25 septembre 2008 à 15:50:10 | Re : extraire miniatures vista - visual C++ - classe abstraite - appel d'une fonction membre non static

jeffy131

Ce n'est pas du tout IThumbnailCache pour extraire les thumbnails
Ca a été donné maintes fois depuis XP sur tous les ng de programmation Win32 pros
 (comp.os.ms-windows.programmer.win32, microsoft.public.platformsdk.shell,
fr.comp.os.ms-windows.programmation, etc)
Et ça se sauvegarde en JPG ou GIF, pas BMP à cause de la taille...
mardi 30 septembre 2008 à 16:58:09 | Re : extraire miniatures vista - visual C++ - classe abstraite - appel d'une fonction membre non static

michelscofield

Merci à tous pour ce rappel sur la programmation COM et aussi pour la piste des News.
Je vais m'abonner de ce pas...bonne continuation !

michelscofield.


Cette discussion est classée dans : fonction, visual, include, bmp, res


Répondre à ce message

Sujets en rapport avec ce message

Visual c++ [ par Maxus ] Salut,j'ai un probleme sous visual c++ lorque j'execute une fonction d'une classe à partir d'une autre...Explication : dans une fenetre, j'ai une list EQUIVALENT FONCTION LEFT EN VB [ par webboy ] Bonjour,est ce que quelqu'un aurait en code c/c++ (Visual mode console) l'equivalent d'une fonction left en visual basicmerci Format de données [ par leskritiques ] Voici le programme que je veux modofier :#include "chaine.h"#include "entreeSortie.h"#include "chaine.cpp"#include "entreeSortie.cpp"int pgcd (const i visual basic [ par 1108 ] comment fonction la fonction mid dans le visual basic probleme d'include [ par titus0m ] bonjour,je develop sous kdev sous linux.mon probleme est un conflit entre deux include qui possede une fonction qui se nomme pareil. C'est la fonction prob. compilateur c++ [ par error ] salut a tous je debute dans la programmation en c++ j'ai po mal de livres mais dans mes livre il ya la fonction #include j'ai un prob mon compilateur Fonction vers DLL [ par logisim ] Quelqu'un pourrait-il m'aider à transformer une fonction Visual Cpp en DLL pour Visual Basic ?En Cpp :int TradUnimarc(FILE *fpU, FILE *fdb){// code}En Prob grave avec Visual... [ par Nuage ] Voila, j'ai un grave problème avec le debug de Visual. Je fait un bête code source, avec une fonction pour créer un élement d'une pile, et une fonctio PROBLEME WINDOW/SOCKET [ par zzzzzz ] Voila le truc j'aimerai que quand on clique sur le bouton connecter sa connect un socket a n'importe kel ip c pas la question. mon applic window march communication réseaux sous visual c++ 6.0 [ par darksoul07 ] Je développe une application client serveur pour discuter en réseauxExiste t il sous visual c++ 6.0 une fonction permettant de savoir si un client est


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales