Должен ли я использовать VB.net 2010 PointOfService.POSPrinter класс для простой работы на принтере POS? - PullRequest
0 голосов
/ 06 января 2012

Это большой вопрос ... но у меня также есть сведения о проблеме, с которой я сталкиваюсь после попытки использования POS. Я гуглил пару дней ... и должен сказать, мне сложно разобраться с этим.

Итак, мне нужно распечатать простую квитанцию ​​на моем тепловом POS-принтере EPSON-TM-T88V с VB.NET 2010 на XP (в конечном итоге для запуска на Windows POSReady) через USB.

Все, что мне нужно напечатать, это текст и логотип. У меня есть логотип на принтере. Итак, мне нужно использовать команды Epson ESC / POS.

Итак, имеет ли смысл использовать Microsoft.PointOfService? Похоже, нужно много пройти, чтобы отправить несколько escape-последовательностей на принтер!

Судя по всему, система PointOfService не была обновлена ​​для безошибочной работы с VB.net 2010 (подробности ниже). Вот почему мне интересно, если я выбрал неправильный путь.

========================

ЕСЛИ это правильный путь ... вот что я сделал и где застрял.

Для тех, кто пытается использовать классы PointOfService в VB 2010: Для начала вам необходимо скачать и установить POS.net (Microsoft.PointOfService) - скачать бесплатно MS. Затем вам нужно добавить ссылки в ваш проект vb.net. Когда вы попытаетесь запустить его, вы, вероятно, получите сообщение об ошибке:

{"Этот метод явно использует политику CAS, которая была устаревшей .NET Framework. Чтобы включить политику CAS по причинам совместимости, используйте переключатель конфигурации NetFx40_LegacySecurityPolicy. Для получения дополнительной информации см. http://go.microsoft.com/fwlink/?LinkID=155570. ".} Есть ссылки на все, как это исправить ... вам нужно исправить ваши файлы конфигурации. Вот один из них: http://social.msdn.microsoft.com/Forums/en-US/posfordotnet/thread/9b3e6f34-de26-4a36-ab8e-13722f53b9e4/ Для 2010 года, по-видимому, вам нужно исправить в QTagent32.exe.config и QTAgent.exe.config.

Хорошо, я все это сделал. НО Ошибка политики CAS возникла снова, с другим способом стека, после того, как я применил рекомендуемые исправления. при первом вызове в систему я получаю сообщение об ошибке CAS ....

at Microsoft.PointOfService.Management.Explorer.CreateExplorer()
   at Microsoft.PointOfService.PosExplorer.LoadExplorer()
   at Microsoft.PointOfService.PosExplorer.Initialize()
   at Microsoft.PointOfService.PosExplorer..ctor()

Есть еще идеи? Спасибо: -)

1 Ответ

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

Мне не нужно использовать весь POS-пакет только для печати на POS-принтере. Вместо этого просто пишите байты прямо на принтер. Это работало для VB.net 4.0 с escape-последовательностями Epson POS / ESC.

Вот инструкции: http://support.microsoft.com/kb/322090

В основном я использовал класс rawprinterhelper. Затем вы можете отправить escape-последовательности напрямую.

Я получил ошибку PInvokeStackImbalance. Для работы rawprinterhelper нужно это одно изменение. Код должен выглядеть следующим образом (параметр pd целочисленный, а не long):

<DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
   Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As  intPtr, ByVal pd As Integer) As Boolean
  End Function

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/13fce4f7-e779-4ce1-b421-1de6007595fe/

...