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.