| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Печать на чековый принтер |
| Автор: Jen5on 3.8.2009, 19:50 | ||||||||||
| Такое дело: есть чековый принтер Epson TM220 вродь... Для теста написал программку вот код Тут настраиваю и открываю...
Тут подготавливаю для печати данные, а потом печатаю...
А тут собственно функция для печати....
Вопрос вот вчем: Когда дело доходит до строки WriteFile(ComPort,OEMString,CheckString.Length(),&bytes_written,NULL); программа вызывает ошибку... Access violation at address 7C89shHG in module "kernel32.dll". Write of address 0000000 а если в последнем блоке программы
меняю на
то вообще что-то долго делает и на печать ничего не выдает... но ошибки тоже не возникает))) (ну разве что проверить только на последнюю ошибку...) Подскажите в чем может быть проблема. Может неправильно настроил порт или параметры в вызове WriteFile неправильные. Кто чем может... Исходники прилагаются... |
| Автор: sawfish 4.8.2009, 06:25 |
| Вот несоответствие, которое я вижу. Функция GetCommState заполняет структуру DCB, после ее изменения (задания своих параметров) применяется SetCommState. А у Вас сначала идет задание параметров DCB, потом Вы ее применяете функцией SetCommState, а потом зачем-то вызываете ее заполнение (GetCommState). Хотя, вроде, это не должно влиять, т.к. новые настройки Вы не применяете... А для чего переменная C? По тексту не видно... По поводу TOverlapped OverWrite. ИМХО, Вам не нужно использовать структуру OVERLAPPED, она для асинхронных операций. И еще, мне непонятно, зачем Вы копируете из CheckString в OEMString. Почему бы не так: WriteFile(ComPort, CheckString.c_str(), CheckString.Length(), &bytes_written, NULL); |
| Автор: sawfish 4.8.2009, 07:03 |
| Да, а где Вы устанавливаете размер буферов приема и передачи (SetupComm)? |
| Автор: Usper 4.8.2009, 08:13 | ||
Откомпилировал приложенный проект, вот что выдалось в порт:
То есть в порт что-то передаётся, осталось только выяснить, чего хочет принтер чтобы начать печать. З.Ы. однако надо учесть, что данные приниал терминал а не принтер. |
| Автор: mrbrooks 4.8.2009, 08:31 |
| Jen5on, вполне вероятно что помимо самой информации - девайсу надо отправить какие то системные команды. К нему есть SDK или что то типа этого? |
| Автор: Jen5on 4.8.2009, 08:49 |
| Спасибо большое человеческое за советы mrbrooks и Usper Обязательно посмотрю какие управляющие символы нужны для отправки на печать. |
| Автор: Jen5on 24.8.2009, 19:35 |
| Все было так банально Вот точно рабочий исходник с exe файлом. |