Итак, я использую Мэтью Эфраима GhostscriptSharp , который представляет собой простую оболочку C # для неуправляемой библиотеки Win32 Ghostscript DLL в моем проекте ASP.Net MVC. Немного предыстории:
Я пытаюсь сделать так, чтобы пользователь загрузил PDF-файл, а затем преобразовал этот документ в изображение, которое затем можно сохранить в любой каталог, который я выбрал (а также сделал несколько других ООП, чтобы привязать это новое изображение к мой сайт).
Я решил использовать класс-оболочку г-на Эфраима (GhostscriptSharp), потому что он достаточно прост в использовании и дает мне относительно чистый доступ к API-интерфейсу DLL.
Чтобы проверить это, я создал фиктивное консольное приложение C #, чтобы убедиться, что я могу загрузить DLL, получить к ней доступ, передать файл PDF на локальный диск и затем записать JPG на тот же локальный диск. После нескольких опытов обучения я добился успеха. Я бы вручил его C: \ INPUT.pdf, он вручил бы мне C: \ OUTPUT.jpg.
Однако после интеграции кода GhostScriptSharp, который у меня был в консольном приложении, в мой проект ASP.NET MVC до точки, где я вызывал DLL с помощью P / invoke, Ghostscript возвращается с кодом int / error -100
, что является фатальной ошибкой (в исходном коде GhostScript называется E_Fatal
). Я получаю один и тот же результат как с файлом, загруженным через форму HTML, так и с тем, чтобы передать ему те же жестко заданные пути, которые я использовал в своем рабочем консольном приложении.
Для справки, строки, которые выдает исключение, 93-97 в GhostScriptSharp.cs (который находится в функции CallApi
):
int result = InitAPI(gsInstancePtr, args.Length, args);
if (result < 0) {
throw new ExternalException("Ghostscript conversion error", result);
}
Очевидно, исключение выдается, потому что result
равен -100
.
Когда вызывается InitAPI, экземпляр ptr является допустимым int
(хотя я не знаю, является ли экземпляр GS правильным или нет), длина аргумента args составляет 20 (является string[]
) действительным Параметры GhostScript (включая правильно экранированные пути к моим входным и выходным файлам).
Короче говоря, что я делаю не так? Код ошибки -100
кажется всеобъемлющим, потому что нет документации, в которой указано, что здесь может пойти не так.
Любая помощь очень ценится, заранее спасибо.