4

我正在尝试使用 Adob​​e IFilter 搜索 PDF 文件。我的代码是用 C# 编写的,我正在使用 p/invoke 来获取 IFilter 的实例:

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

这适用于大多数 PDF 文件,除了一些此方法返回 -2147467259 并且 ppIUnk 为 null 的文件。有没有人有这种类型的错误或有任何关于如何解决这个问题的建议?

4

4 回答 4

4

有关该功能,请参阅MSDN 文档LoadIFilter- 您应该得到其中一个错误代码,至少根据该页面。

  • E_ACCESSDENIED = 0x80070005- 该函数被拒绝访问过滤器文件。
  • E_HANDLE = 0x80070006- 函数遇到无效句柄,可能是由于内存不足。
  • E_INVALIDARG = 0x80070057- 函数接收到无效参数。
  • E_OUTOFMEMORY = 0x8007000E- 该函数没有足够的内存或其他资源来完成操作。
  • E_FAIL = 0x80000008- 函数遇到未知错误。

(此外,此处列出了完整的常量值集,这似乎比 MSDN 上列出的要长。)现在,有趣的是,您的错误代码对应80004005于十六进制,它没有在任何一个或那些上列出页。但是,我怀疑 pinvoke.net 可能有问题,因为许多其他网站(例如这个)将其列为E_FAIL......并不是说它真的有帮助。很抱歉这个没有定论的答案,但也许它至少会让你走上正确的道路。

编辑:此错误似乎已在其他地方记录,并给许多人造成了很大的困惑,没有简单的解决方案。似乎原因实际上可能是几个原因之一......您可能想尝试这里这里的各种建议,但我认为我无法为您提供更多帮助,因为我从未遇到过此错误我自己在这种情况下。总之祝你好运...

于 2009-03-27T14:54:44.060 回答
0

这是我解决它的方法:

卸载 Adob​​e Reader/Acrobat。安装最新版本(再次)。它应该修复pdf过滤器。祝你好运。

于 2010-10-11T14:43:30.287 回答
0

要绕过 Adob​​e 10.x 的 E_FAIL,请参阅https://stackoverflow.com/a/8841476/455322

于 2012-01-12T20:07:22.440 回答
0

我在运行 LoadIFilter 时得到了相同的结果,直到我发现这篇文章指出了解决方案:

确保您的构建平台目标是x86并避免从 Visual Studio 中运行应用程序。

此外,如果您可以将与 IFilter 交互的代码移动到名为filtdump.exe的单独 .exe 应用程序中,您将大大简化代码。

于 2014-12-15T18:47:24.450 回答