2009-03-27 11 views
4

J'essaie d'utiliser Adobe IFilter pour rechercher des fichiers PDF. Mon code est écrit en C# et je me sers p/Invoke pour obtenir une instance de IFilter:LoadIFilter() renvoie -2147467259 pour certains fichiers PDF

[DllImport("query.dll", SetLastError = true, CharSet = CharSet.Unicode)] 
    private extern static int LoadIFilter(
     string pwcsPath, 
     [MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter, 
     ref IFilter ppIUnk); 

Cela fonctionne pour la plupart des fichiers PDF à l'exception de quelques pour lesquels cette méthode retourne -2147467259 et ppIUnk vient comme nulle. Est-ce que quelqu'un a ce type d'erreurs ou avez des suggestions sur la façon de comprendre cela?

Répondre

4

Voir la MSDN docs pour la fonction LoadIFilter - vous devriez obtiendrez l'un des codes d'erreur, au moins selon cette page.

  • E_ACCESSDENIED = 0x80070005 - La fonction a été refusé l'accès au fichier de filtre.
  • E_HANDLE = 0x80070006 - La fonction a rencontré un handle non valide, probablement en raison d'une situation de mémoire insuffisante.
  • E_INVALIDARG = 0x80070057 - La fonction a reçu un paramètre non valide.
  • E_OUTOFMEMORY = 0x8007000E - La fonction ne disposait pas de suffisamment de mémoire ou d'autres ressources pour terminer l'opération.
  • E_FAIL = 0x80000008 - La fonction a rencontré une erreur inconnue.

(En outre, l'ensemble des valeurs constantes est cotée here, ce qui semble être un peu plus longue que celle figurant sur MSDN.) Maintenant, les choses intéressantes est, votre code d'erreur correspond à 80004005 dans l'hexagone, qui ISN n'est pas listé sur l'une ou l'autre de ces pages. Je soupçonne pinvoke.net peut-être tort cependant, comme de nombreux autres sites (this par exemple) la liste comme E_FAIL ... pas que cela aide vraiment de toute façon. Désolé pour la réponse non concluante, mais peut-être que cela vous indiquera au moins la bonne voie.

Éditer: Cette erreur semble avoir été documentée ailleurs et a causé beaucoup de confusion à beaucoup de gens, sans solution simple. Il semble que la cause pourrait être l'une de plusieurs en fait ... Il y a plusieurs suggestions here et here que vous pouvez essayer, mais je ne pense pas que je peux vous aider plus que cela, car je n'ai jamais rencontré cette erreur moi-même dans ce contexte. Bonne chance quand même ...

0

Voilà comment je l'ai résolu:

Désinstallez Adobe Reader/Acrobat. Installez la dernière version (à nouveau). Il devrait fixer les filtres pdf. Bonne chance.

0

Je suis le même résultat lors de l'exécution LoadIFilter jusqu'à ce que je this poste qui me montra la solution:

Assurez-vous que votre La cible de plate-forme de construction est x86 et évite d'exécuter l'application à partir de Visual Studio.

De même, si vous pouvez déplacer votre code qui interagit avec IFilter dans une application .exe distincte portant le nom filtdump.exe, vous allez simplifier considérablement votre code.