· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› LPT в WIN32

Посл.отвђт Сообщенiе


Дата: Дек 7, 2003 18:38:11

Как писать в LPT, не используя WriteFile?
В Visual C++ 6.0 пишу:

#include <windows.h>

INT WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nShowCmd)
{
HANDLE port;

port = CreateFile("LPT1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NU LL);

if (port == INVALID_HANDLE_VALUE)
MessageBox(NULL,"Не возможно открыть LPT1","Error",MB_OK);

char buf = 1;
DWORD BytesWriten = 0;

WriteFile (port, &buf, 1, &BytesWriten, NULL);


CloseHandle (port);
return 0;
}

Все компилиться без ошибок, но на WriteFile прога зависает и всё.
Помогите!


Дата: Дек 7, 2003 20:58:24 · Поправил: Quantum

AZ87
Как писать в LPT, не используя WriteFile?
Лучше всего писать именно через WriteFile.

но на WriteFile прога зависает и всё
Чтоб не зависала нужно предварительно вызвать SetCommTimeouts.

Ещё перед CloseHandle желательно добавить
PurgeComm(port,PURGE_TXABORT | PURGE_TXCLEAR);

Кстати, а что подключено к порту? Принтер?


Дата: Дек 8, 2003 18:26:15

Принтер подключен к USB, а к порту подключен девайс со светодиодиками и кнопочками. Если в DOS'е то светодиоды на 0х378 порту, а кнопки на 0х379.


Дата: Дек 8, 2003 18:28:37

AZ87
а к порту подключен девайс со светодиодиками и кнопочками.
Я так сразу и заподозрил ;-) В DOS'е всё работало?


Дата: Дек 8, 2003 19:20:20

Работало отлично. Спасибо за SetCommTimeouts. А можно писать вообще без тайаутов. Мне требуется скорость, а милисекундные задержки не нужны. Ещё вопрос. Что делает Функция PurgeComm?


Дата: Дек 8, 2003 19:25:59

А можно писать вообще без тайаутов
Обнулить оба таймаута в SetCommTimeouts.

Что делает Функция PurgeComm?
Очищает буфер контроллера и финиширует все операции чтения/записи.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.065