4

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);

これは、このメソッドが -2147467259 を返し、ppIUnk が null になるいくつかを除いて、ほとんどの PDF ファイルで機能します。誰かがこのタイプのエラーを抱えているか、これを理解する方法について何か提案がありますか?

4

4 に答える 4

4

関数についてはMSDN のドキュメントを参照してください。少なくともそのページによると、エラー コードの 1 つが表示されるはずです。LoadIFilter

  • E_ACCESSDENIED = 0x80070005- 関数はフィルター ファイルへのアクセスを拒否されました。
  • E_HANDLE = 0x80070006- おそらくメモリ不足の状況が原因で、関数が無効なハンドルを検出しました。
  • E_INVALIDARG = 0x80070057- 関数が無効なパラメータを受け取りました。
  • E_OUTOFMEMORY = 0x8007000E- 関数には、操作を完了するのに十分なメモリまたはその他のリソースがありませんでした。
  • E_FAIL = 0x80000008- 関数で不明なエラーが発生しました。

(また、定数値の完全なセットがここにリストされています。これは、MSDN にリストされているものよりもかなり長いようです。) さて、興味深いことに、エラー コード80004005は 16 進数に対応しており、どちらにもリストされていません。ページ。私はpinvoke.netが間違っているのではないかと疑っていますE_FAIL. 決定的でない回答で申し訳ありませんが、少なくとも正しい道に沿って進むことができるかもしれません.

編集:このエラーは他の場所で文書化されているようで、単純な解決策がなく、多くの人々に多くの混乱を引き起こしました. 原因は実際にはいくつかのいずれかの可能性があるようです...ここここで試してみたいと思うかもしれないさまざまな提案がありますが、私はこのエラーに遭遇したことがないので、それ以上あなたを助けることができるとは思いません.この文脈で私自身。とにかく頑張ってください...

于 2009-03-27T14:54:44.060 に答える
0

これが私がそれを解決した方法です:

Adobe Reader/Acrobat をアンインストールします。最新バージョンをインストールします (再度)。PDFフィルターを修正する必要があります。幸運を。

于 2010-10-11T14:43:30.287 に答える
0

解決策を示したこの投稿が 見つかるまで、LoadIFilter を実行しても同じ結果が得られました。

ビルド プラットフォーム ターゲットがx86であることを確認し、Visual Studio 内からアプリケーションを実行しないようにします。

また、IFilter と対話するコードをfiltdump.exeという名前の別の .exe アプリケーションに移動できれば、コードを大幅に簡素化できます。

于 2014-12-15T18:47:24.450 に答える
0

Adobe 10.x の E_FAIL を回避するには、 https: //stackoverflow.com/a/8841476/455322 を参照してください。

于 2012-01-12T20:07:22.440 に答える