我正在尝试使用 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 为空的少数文件除外。有没有人遇到这种类型的错误或对如何解决这个问题有任何建议?
最佳答案
参见 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
...并不是说它真的有帮助。对于不确定的答案,我们深表歉意,但也许它至少会为您指明正确的轨道。
编辑: 这个错误似乎已经在其他地方记录下来并且给很多人造成了很多困惑,没有简单的解决方案。看起来原因实际上可能是其中之一......有各种建议here和 here您可能想尝试一下,但我认为我无法为您提供更多帮助,因为在这种情况下我自己从未遇到过此错误。无论如何祝你好运......
关于c# - 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/690076/