我正在尝试使用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为空。有没有人有这种类型的错误或有任何建议如何解决这个问题?
答案 0 :(得分:4)
请参阅MSDN docs LoadIFilter
函数 - 应该获取其中一个错误代码,至少根据该页面。
0x80070005
-
该函数被拒绝访问过滤器文件。0x80070006
-
该函数遇到无效句柄,可能是因为内存不足。0x80070057
-
该函数收到无效参数。0x8007000E
-
该功能没有足够的内存或其他资源来完成操作。0x80000008
-
该函数遇到未知错误。 (另外,列出了here的完整常量值,它似乎比MSDN上列出的更长。)现在,有趣的是,您的错误代码对应于80004005
十六进制,未列在任何页面或那些页面上。我怀疑pinvoke.net可能有错,但是,许多其他网站(例如this)将其列为E_FAIL
...并不是说它真的有帮助。对于不确定的答案感到抱歉,但也许它会指出你至少在正确的轨道上。
编辑:此错误似乎已在其他地方记录,并且给许多人带来了很多困惑,没有简单的解决方案。事实上似乎原因可能是其中之一......你可能想尝试各种建议here和here,但我认为我不能帮助你因为我在这种情况下从未遇到过这个错误。祝你好运...
答案 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应用程序中,您将大大简化代码。