对于某些PDF文件,LoadIFilter()返回-2147467259

时间:2009-03-27 14:49:26

标签: c# pdf adobe ifilter

我正在尝试使用Adobe 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为空。有没有人有这种类型的错误或有任何建议如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

请参阅MSDN docs LoadIFilter函数 - 应该获取其中一个错误代码,至少根据该页面。

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

(另外,列出了here的完整常量值,它似乎比MSDN上列出的更长。)现在,有趣的是,您的错误代码对应于80004005十六进制,未列在任何页面或那些页面上。我怀疑pinvoke.net可能有错,但是,许多其他网站(例如this)将其列为E_FAIL ...并不是说它真的有帮助。对于不确定的答案感到抱歉,但也许它会指出你至少在正确的轨道上。

编辑:此错误似乎已在其他地方记录,并且给许多人带来了很多困惑,没有简单的解决方案。事实上似乎原因可能是其中之一......你可能想尝试各种建议herehere,但我认为我不能帮助你因为我在这种情况下从未遇到过这个错误。祝你好运...

答案 1 :(得分:0)

以下是我如何解决它:

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

答案 2 :(得分:0)

要了解Adobe 10.x的E_FAIL,请参阅https://stackoverflow.com/a/8841476/455322

答案 3 :(得分:0)

我在运行LoadIFilter时得到了相同的结果,直到我发现this帖子指向了解决方案:

确保构建平台目标为x86,并避免在Visual Studio中运行应用程序。

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