LoadIFilter () возвращает -2147467259 для некоторых файлов PDF - PullRequest
4 голосов
/ 27 марта 2009

Я пытаюсь использовать 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 имеет значение null. У кого-нибудь есть ошибки такого типа или есть предложения, как это выяснить?

Ответы [ 4 ]

4 голосов
/ 27 марта 2009

См. MSDN документы для функции LoadIFilter - вы должны получить один из кодов ошибок, по крайней мере, в соответствии с этой страницей.

  • E_ACCESSDENIED = 0x80070005 - Функция была лишена доступа к файлу фильтра.
  • E_HANDLE = 0x80070006 - Функция обнаружила недопустимый дескриптор, возможно, из-за нехватки памяти.
  • E_INVALIDARG = 0x80070057 - Функция получила неверный параметр.
  • E_OUTOFMEMORY = 0x8007000E - У функции не было достаточно памяти или других ресурсов для завершения операции.
  • E_FAIL = 0x80000008 - Функция обнаружила неизвестную ошибку.

(Кроме того, здесь указан полный набор постоянных значений здесь , что, кажется, намного длиннее, чем указано в MSDN.) Теперь интересно то, что ваш код ошибки соответствует 80004005 в шестнадцатеричном виде, которого нет ни на одной, ни на тех страницах. Я подозреваю, что pinvoke.net, возможно, ошибается, так как многие другие сайты (например, , это ) указывают это как E_FAIL ... не то, чтобы это все равно помогло. Извините за неокончательный ответ, но, возможно, он укажет вам хотя бы правильный путь.

Редактировать: Эта ошибка, похоже, была задокументирована в другом месте и вызывала много путаницы у многих людей, не имея простого решения. Кажется, что причина может быть одной из нескольких на самом деле ... Существуют различные предложения здесь и здесь , которые вы можете попробовать, но я не думаю, что смогу вам помочь более того, поскольку я никогда не сталкивался с этой ошибкой в ​​этом контексте. В любом случае, удачи ...

0 голосов
/ 15 декабря 2014

Я получал тот же результат при запуске LoadIFilter, пока не нашел этот пост, в котором указывалось на решение:

Убедитесь, что целью вашей платформы сборки является x86, и избегайте запуска приложения из Visual Studio.

Кроме того, если вы можете переместить свой код, взаимодействующий с IFilter, в отдельное приложение .exe с именем Filterdump.exe , вы значительно упростите свой код.

0 голосов
/ 13 января 2012

Чтобы обойти E_FAIL для Adobe 10.x, см. https://stackoverflow.com/a/8841476/455322

0 голосов
/ 11 октября 2010

Вот как я это решил:

Удалите Adobe Reader / Acrobat. Установите последнюю версию (снова). Это должно исправить фильтры PDF. Удачи.

...