2010-04-29 5 views
4

J'essaie d'écrire un gestionnaire de miniatures Windows Explorer pour notre type de fichier personnalisé. Cela fonctionne bien pour le volet de prévisualisation, mais j'ai du mal à le faire fonctionner pour les vignettes.Le fournisseur de miniatures ne fonctionne pas

Windows ne semble même pas essayer d'appeler le point d'entrée DllGetClassObject.

Avant de poursuivre, notez que j'utilise Windows 7 et C++ non géré.

Je me suis inscrit les valeurs suivantes dans le Registre:

HKCR\CLSID\<my guid> 
HKCR\CLSID\<my guid>\InprocServer32 (default value = path to my DLL) 
HKCR\CLSID\<my guid>\InprocServer32\ThreadingModel (value = "Apartment") 
HKCR\.<my ext>\shellex\{E357FCCD-A995-4576-B01F-234630154E96} (value = my guid) 

J'ai aussi essayé d'utiliser l'échantillon SDK Win, et qui ne fonctionne pas. Et aussi le projet exemple dans cet article (http://www.codemonkeycodes.com/2010/01/11/ithumbnailprovider-re-visited/), et cela ne fonctionne pas.

Je ne connais pas encore la programmation shell, donc je ne suis pas vraiment sûr de la meilleure façon de le déboguer. J'ai essayé d'attacher le débogueur à explorer.exe, mais cela ne semble pas fonctionner (les points d'arrêt sont désactivés, et aucun de mes OutputDebugStrings ne s'affiche dans la fenêtre de sortie). Notez que j'ai essayé de définir le "DesktopProcess" dans le registre comme décrit dans les docs WinSDK pour le débogage du shell, mais je ne vois toujours qu'un explor.exe dans le gestionnaire de tâches - de sorte que "peut" être pourquoi je ne peux pas le déboguer ??

Une aide avec ceci serait grandement appréciée!

Cordialement, Dan.

Répondre

5

Je suis tombé sur ce sujet depuis que vous avez mentionné mon blog (codemonkeycodes.com).

Quel problème rencontrez-vous avec mon échantillon? Avez-vous enregistré votre DLL en utilisant regsvr32? Quelle version de Windows 7 êtes-vous, 32 ou 64?


Mise à jour:

Je ne peux pas dire ce qui est ou ne fonctionne pas pour vous. Je viens de télécharger l'échantillon de mon site, suivi les instructions et changer la fonction STDMETHODIMP CThumbnailProvider :: GetThumbnail ... pour ressembler à

{ 
*phbmp = NULL; 
*pdwAlpha = WTSAT_UNKNOWN; 

ULONG_PTR token; 
GdiplusStartupInput input; 
if (Ok == GdiplusStartup(&token, &input, NULL)) 
{ 
    //gcImage.LogBuffer(); 
    Bitmap * pBitmap = new Bitmap(188, 141); 
    if(pBitmap) 
    { 
     Color color(0, 0, 0); 
     pBitmap->GetHBITMAP(color, phbmp); 
    } 
} 

GdiplusShutdown(token); 

if(*phbmp != NULL) 
    return NOERROR; 

return E_NOTIMPL; 
} 

Je me suis inscrit la DLL, puis créé un nouveau fichier avec l'extension appropriée, et tada, j'avais une jolie vignette noire.

J'aimerais pouvoir vous aider. Peut-être que vous voulez m'envoyer votre code?

+0

Salut. J'utilise x64 Windows7. Comme ce n'est pas seulement votre échantillon qui ne fonctionne pas pour moi - ce sont les échantillons MS et mon propre code qui ne fonctionne pas non plus - je suppose qu'il y a quelque chose d'autre. Comme je suis novice dans la programmation de shell Windows (mon expérience concerne le développement d'applications et de jeux), je ne connais pas vraiment la meilleure façon de le déboguer. J'ai essayé d'attacher mon débogueur (MS VS 2005) à explorer.exe, mais je ne vois aucun de mes journaux de trace. – Dan

+0

Une question stupide, et je suis sûr que vous n'avez pas oublié cela, mais avez-vous vous inscrire DLL avec la version 64bit de regsrv32? – Jeremy

+0

Oui, j'ai tapé explicitement dans \ windows \ system32 \ regsvr32.exe. Savez-vous à quel moment Windows devrait appeler ma fonction DllGetClassObject? Il serait utile de voir si cela va arriver. – Dan

1

J'ai exactement le même problème. Je ne peux pas faire SDK ou tout échantillon fonctionne. J'ai besoin d'un échantillon COM car je dois appeler Microsoft.Jet.OLEDB.4.0 qui ne fonctionne que sur un système 32 bits.

Je ne pourrais pas faire ce travail:link

Cela fonctionne si AnyCPU est spécifié lors de la compilation.Ne peux pas faire cela fonctionne pour x86:link

C'était bien sous XP fonctionne comme un charme:link

Ce spectacle Adobe a eu des problèmes avec vignette Un MS avec Office 2007 (32 bits):link

Questions connexes