Использование Visual C ++ 2010 для перенаправления на STDIN другого приложения - PullRequest
0 голосов
/ 16 марта 2012

У меня небольшая проблема.Я работал над созданием драйвера принтера для лазера, которым владеет моя компания.Лазер поставляется с проприетарным программным обеспечением, которое позволяет управлять им с помощью API.Я подумал, что было бы неплохо разрешить любой программе «печатать» на лазер.До сих пор я сделал свой собственный принтер Postscript, используя Redmon.Мое пользовательское приложение до сих пор может обрабатывать вывод из Redmon, захватывать его с помощью стандартного ввода и публиковать в файл.Следующий шаг в этом процессе - сделать так, чтобы ghostscript превратил файл в BMP.Я могу вручную использовать Ghostscript, чтобы конвертировать файл, который я создал с моим приложением, и сделать bmp.Я хотел бы, по возможности, избегать временных файлов и перенаправлять ввод из Redmon в Ghostscript напрямую.Я последовал примеру Microsoft http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499%28v=vs.85%29.aspx. Я изменил его так, чтобы он брал входные данные, которые я записал ранее, помещаю в строку и применяю к буферу вместо чтения в буфер и записи.Ghostscipt делает, с каждой 5-й попытки или около того, захватывает некоторые данные, но обычно только первые 4096 байтов.В других случаях ничего не получается.Проблема в том, что Ghostscript может читать только один раз из stdin (при первом выполнении), ожидая, что данные уже будут там.Если я последую примеру Microsoft, он будет работать только в том случае, если по какой-то случайности я запишу все эти данные перед выполнением Ghostscript.Я попытался повернуть процесс вспять и записать данные, прежде чем запустить процесс, но он потерпел неудачу полностью.

Есть предложения?Спасибо.

...