Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Печать через Com порт на матричный принтер  (Прочитано 10098 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Vovich
Гость
« : 12-05-2004 08:30 » 

Доброго дня. С ком портами раньше не разбирался. Подскажите, помогите, кто знает. Хочу организовать печать на матричный принтер (LX300+).  Вот код:
BOOL fSuccess;

hCom = CreateFile( "COM1:",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (hCom == INVALID_HANDLE_VALUE) {
MessageBox("Error!","Com port couldn't work!");
}

fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess) {MessageBox("Error!");}

dcb.BaudRate = CBR_9600; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit

fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess) {MessageBox("Error!","SetCommState");}

DWORD recogn=0;
char *my="NNN";
MessageBox(my);
fSuccess = WriteFile(hCom,&my,3,&recogn,NULL);
if (!fSuccess) {MessageBox("Error!","Not Write!!!");}
CloseHandle(hCom);

Принтер пикает, дергается, печатает абракадабру из 4-х символов и все. Причем такая реакция независимо от того какие и символы и сколько посылаю.
Принтер настроен на ком порт, другие настройки соответствуют. Заведомо рабочий (проверялся с чужой программой - печатает).
Рылся в инете, именно по печати через ком - увы, не нашел.
Что не так и где копать?
 Жаль
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 12-05-2004 10:44 » 

Посмотри тн handshake или flow control - сигналы выставляемые на пинах DTR RTS.

Соответствующие поля в структуре DCB - fDtrControl и fRtsControl

Обычно принтеры работают в тн hardware handshake или синхронном режиме. Иначе принтер получает исковерканые байты.

Поиграться лучше всего с  прогой из MSDN - mttty.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Vovich
Гость
« Ответ #2 : 12-05-2004 11:19 » 

Доигрался! Жаль
GetCommState возвращает ошибку...
Джон, а где эту прогу искать?
Записан
cooler
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 18-05-2004 14:16 » 

А не проще использовать функцию WritePrinter()

hCom = CreateFile( "COM1:",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (hCom == INVALID_HANDLE_VALUE) {
MessageBox("Error!","Com port couldn't work!");
}

.......
WritePrinter(hCom , ...);
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 18-05-2004 15:05 » 

Vovich,  Сорри как-то не уследил - просто набери в MSDN - MTTTY.
Если не найдёшь - давай мыло.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Vovich
Гость
« Ответ #5 : 20-05-2004 05:59 » 

Всем спасибо, все заработало.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines